当我在c ++析构函数中抛出异常时会发生什么?

时间:2010-08-05 03:59:18

标签: c++

  

可能重复:
  throwing exceptions out of a destructor

在C ++中,我们不应该在析构函数中抛出异常。这段代码是否按预期工作?

struct a 
{ 
    ~a( ) { } 
};
struct b : public a 
{
    ~b( ) 
    { 
        throw 1; 
    }; 
};
bool c( ) 
{ 
    a* d=new b; 
    try 
    { 
        delete d; 
    } 
    catch( int e ) 
    { 
        return e; 
    }
    return false; 
}

1 个答案:

答案 0 :(得分:0)

  

此代码是否按预期工作?

你自己尝试过运行吗?还要看看this FAQ - 根据它,是的,它会在你的简单案例中起作用,但总的来说,你不应该这样做。同样,它取决于你如何定义“按预期工作” - 程序将运行没有错误,但你可能会泄漏内存,因为对象没有被释放。