代码 :
#include<iostream>
using namespace std;
class A{
public:
A(){cout << "A() Constructor " << endl;
throw 1;
}
};
int main(){
A* p=0;
cout << p << endl; // p value is 0
try{
p=new A(); // object is not fully constructed, no address is returned to p. for future deallocation
}
catch(...){cout << "Exception" << endl;}
cout << p << endl; // this will output that p has the value 0,proof that no address was returned to p.
}
为堆中的一个对象分配内存,内存的地址被传递给构造函数,但是当构造函数时throw 1;
,类型的对象A
不会被认为是一个完全构造的对象。所以没有指针会返回指针p。如果我理解错误,请随时纠正我。
问题:
1)所以我的问题是在这种情况下如何为 A 对象释放内存。我不是在谈论析构函数调用,而是内存的释放。
2)当我在函数A
内部创建一个本地类型的对象时呢?main
显然它也不会完全建成。这个对象什么时候被释放(当然是在调用完全构造的子对象的析构函数之后)。