我知道 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 )内存?