iha*_*mer 6 c++ stack stack-unwinding
我有一个简单的C++对象,我在函数F()的开头创建,以确保在F()的启动和返回时调用两个匹配的函数(OpDo,OpUndo),方法是使用对象的构造函数和析构函数.但是,如果在F()的主体内抛出异常,我不希望撤消操作.这可以干净利落吗?我读过有关std :: uncaught-exception的内容,但似乎并未建议使用它.
大多数人习惯于std::uncaught_exception()试图判断异常是否未决,因此如果没有异常,它们可以从析构函数中抛出异常.这通常被认为不是一个好主意.
如果你想要在抛出异常时不撤消操作,它应该可以解决问题.
请记住,析构函数是释放对象所具有的任何资源的最后机会,因为在析构函数结束后,对象不存在,并且它所拥有的任何资源现在都会永久泄露.如果OpDo()分配任何内存或文件句柄或其他什么,你需要在析构函数中处理它,无论如何.
| 归档时间: |
|
| 查看次数: |
822 次 |
| 最近记录: |