析构函数抛出异常
析构函数抛出异常
C++中禁止异常信息传递到析构函数外
析构函数中不得直接或间接抛出异常;原因:析构函数中抛出异常可能导致堆栈展开(stack unwind)时异常嵌套,程序无法正常捕捉异常,直接终止;
如果析构时调用会跑出异常的函数,则需要捕获异常,但什么都不做,防止异常被传递到析构函数外。
Session::~Session()
{
try {
logDestruction(this);
}
catch (...) { }
}
构造函数抛出异常
C++ 里面当构造函数抛出异常时,其会调用构造函数里面已经创建对象的析构函数,但是对以自己的析构函数没有调用,就可能产生内存泄漏,比如自己new 出来的内存没有释放。
有两个办法。在Catch 块里面释放已经申请的资源 或者 用智能指针把资源当做对象处理。