欢迎来到天天文库
浏览记录
ID:48453828
大小:31.50 KB
页数:6页
时间:2020-01-31
《C异常处理(精).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.word可编辑. #include"stdafx.h" #include #include #include //内存泄露检测机制 #define_CRTDBG_MAP_ALLOC #ifdef_DEBUG #definenewnew(_NORMAL_BLOCK,__FILE__,__LINE__ #endif //自定义异常类 classMyExcepction { public: //构造函数,参数为错误代码 MyExcepction(interrorId { //输出构造函数被调用信息 std::cout<<"M
2、yExcepctioniscalled"<m_errorId=myExp.m_errorId; } ~MyExcepction( { //输出析构函数被调用信息 std::cout<<"~MyExcepctioni
3、scalled"<4、_CRTDBG_LEAK_CHECK_DF; //可以改变错误码,以便抛出不同的异常进行测试 intthrowErrorCode=110; st5、d::cout<<"inputtestcode:"<>throwErrorCode; try { if(throwErrorCode==110 { MyExcepctionmyStru(110; //抛出对象的地址->由catch(MyExcepction* pMyExcepction捕获 //这里该对象的地址抛出给catch语句,不会调用对象的拷贝构造函数 //传地址是提倡的做法,不会频繁地调用该对象的构造函数或拷贝构造函数 //catch语句执行结束后,myStru会被析构掉 thro6、w &myStru; } elseif(throwErrorCode==119 { MyExcepctionmyStru(119; //抛出对象,这里会通过拷贝构造函数创建一个临时的对象传出给catch //由catch(MyExcepction myExcepction捕获 //在catch语句中会再次调用通过拷贝构造函数创建临时对象复制这里传过去的对象.专业.专注..word可编辑. //throw结束后myStru会被析构掉 throw myStru; } elseif(throwErrorCode==120 { 7、 //不提倡这样的抛出方法 //这样做的话,如果catch(MyExcepction* pMyExcepction中不执行delete操作则会发生内存泄露 //由catch(MyExcepction* pMyExcepction捕获 MyExcepction*pMyStru=newMyExcepction(120; throwpMyStru; } else { //直接创建新对象抛出 //相当于创建了临时的对象传递给了catch语句 //由catch接收时通过拷贝构造函数再次创建临时对象接收传递过去的对象 //throw结束后8、两次创建的临时对象会被析构掉 throwMyExcepction(throwErrorCode; } } catch(MyExcepction* pMyExcepction {.专业.专注..word可编辑. //输出本语句被执行信息 std::cout<<"执行了catch(MyExcepction* pMyExcepction"<getErrorId(<9、在函数栈上,而是创建在专用的异常栈上,不需要进行delete /
4、_CRTDBG_LEAK_CHECK_DF; //可以改变错误码,以便抛出不同的异常进行测试 intthrowErrorCode=110; st
5、d::cout<<"inputtestcode:"<>throwErrorCode; try { if(throwErrorCode==110 { MyExcepctionmyStru(110; //抛出对象的地址->由catch(MyExcepction* pMyExcepction捕获 //这里该对象的地址抛出给catch语句,不会调用对象的拷贝构造函数 //传地址是提倡的做法,不会频繁地调用该对象的构造函数或拷贝构造函数 //catch语句执行结束后,myStru会被析构掉 thro
6、w &myStru; } elseif(throwErrorCode==119 { MyExcepctionmyStru(119; //抛出对象,这里会通过拷贝构造函数创建一个临时的对象传出给catch //由catch(MyExcepction myExcepction捕获 //在catch语句中会再次调用通过拷贝构造函数创建临时对象复制这里传过去的对象.专业.专注..word可编辑. //throw结束后myStru会被析构掉 throw myStru; } elseif(throwErrorCode==120 {
7、 //不提倡这样的抛出方法 //这样做的话,如果catch(MyExcepction* pMyExcepction中不执行delete操作则会发生内存泄露 //由catch(MyExcepction* pMyExcepction捕获 MyExcepction*pMyStru=newMyExcepction(120; throwpMyStru; } else { //直接创建新对象抛出 //相当于创建了临时的对象传递给了catch语句 //由catch接收时通过拷贝构造函数再次创建临时对象接收传递过去的对象 //throw结束后
8、两次创建的临时对象会被析构掉 throwMyExcepction(throwErrorCode; } } catch(MyExcepction* pMyExcepction {.专业.专注..word可编辑. //输出本语句被执行信息 std::cout<<"执行了catch(MyExcepction* pMyExcepction"<getErrorId(<9、在函数栈上,而是创建在专用的异常栈上,不需要进行delete /
9、在函数栈上,而是创建在专用的异常栈上,不需要进行delete /
此文档下载收益归作者所有