当构造函数抛出错误时,auto_ptr不会破坏对象

时间:2015-10-20 08:17:45

标签: c++ constructor exception-handling auto-ptr

我知道 auto_ptr 会在超出范围时自动销毁对象。但是当Constructor抛出异常时,它不会破坏对象(请看下面的代码片段)。

让我解释下面的代码,我有A类,它有一个auto_ptr字段" autoPtr" (它有一个指向Test类的指针)。在下面的场景中,一个类构造函数抛出" Malloc"错误。我期待Auto_Ptr调用Test类析构函数,但它没有。

#include <iostream>
#include <memory>
using namespace std;
class Test
{
public:
    Test()
    {
        cout << "Test Constructor" << endl;
    }
    ~Test()
    {
        cout << "Test Destructor" << endl;
    }
};

class A
{
private:
    int *ptr;
    auto_ptr<Test> autoPtr;
public:
    A():autoPtr(new Test()), ptr(NULL)
    {
        ptr = (int *)malloc(INT_MAX);
        if(ptr == NULL)
            throw exception("Malloc failed");
    }
};

int main()
{
    try
    {
        A *obj = new A();
    }
    catch (exception e)
    {
        cout << "Caught exception :" <<e.what()<< endl;
    }
}

输出是:

测试构造函数

捕获异常:Malloc失败

为什么在上面的代码中没有调用测试类析构函数

谁释放了一个类对象 obj )内存?

0 个答案:

没有答案