如果我在构造函数中使用new为指针分配一些内存,并且在分配内存形式构造函数后抛出异常,内存是否会被回收或是内存泄漏?
class A
{
public:
A()
{
p = new int(4);
throw 1;
}
~A()
{
delete p;
}
private:
int *p;
};
答案 0 :(得分:1)
内存不会被回收。即使您正确使用了析构函数(以及复制/赋值运算符),它仍然会泄漏内存。
任何完全构造的子对象将在抛出后被破坏。在这种情况下,p
将被破坏,不要与p
指向的内存混淆相混淆:它们是两个非常不同的东西,记忆实际上会被泄露。