[cpp] view plain copy
- // testFinally.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- #include <windows.h>
- std::string s;
- //本源码在VC2008+SP1 WindowsXP+SP3 下测试通过 by lee353086
- void myFinally()
- {
- int i=2;//"int i",不需要析构所以可以放在这里
- //注意"std::string s;"这行代码不能放在
- //这里,因为s这个对象需要析构
- //除0,非法指令、存取违例 等等对C++而言是 错误,而不是 异常,和 try-catch 无关
- //所以这里得使用__try__except来捕获除零错误
- __try
- {
- s="My Finally";
- //throw s;//这里throw的s异常会被_tmain中的catch(std::string s)捕获,myFinally函数体剩余的代码将不会被执行
- i = i/0;
- }
- //下面这行可以用用__except(1)来代替,这样就不需要包含#include <windows.h>这段代码
- __except( GetExceptionCode()==EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
- {
- cout<<"got除零错误!"<<endl;
- }
- cout<<s.c_str()<<endl;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout<<"main begin"<<endl;
- try{
- myFinally();
- }catch(std::string s)
- {
- cout<<"got其它错误"<<endl;
- }
- cout<<"main end"<<endl;
- return 0;
- }