使用双保险保证异常不跑出析构函数:
class Test_1 { public: void close(){....} //可能发生异常的函数 }; class Test_2 //定义一个管理类 { public: Test_2(){ isClose = false} void close() { t1.close(); //若发生异常,下面的语句不会被执行 isClose = true; } ~Test_2() { if(!isClose) { try{ t1.close(); } //这个类的close()没有被使用或者发送异常,所以在析构函数里调用t1.close()关闭 catch(...){} //这里可以使用结束整个程序或者吞掉异常方法处理 } } private: Test_1 t1; bool isClose; };
像上面一样,在类外面定义一个close()函数。