如果我从构造函数中抛出异常,构造函数中分配的内存会发生什么?

时间:2014-09-22 19:00:35

标签: c++

如果我在构造函数中使用new为指针分配一些内存,并且在分配内存形式构造函数后抛出异常,内存是否会被回收或是内存泄漏?

class A
{
    public:
        A()
        {
            p = new int(4);
            throw 1;
        }

        ~A()
        {
            delete p;
        }

    private:
        int *p;
};

1 个答案:

答案 0 :(得分:1)

内存不会被回收。即使您正确使用了析构函数(以及复制/赋值运算符),它仍然会泄漏内存。

任何完全构造的子对象将在抛出后被破坏。在这种情况下,p将被破坏,不要与p指向的内存混淆相混淆:它们是两个非常不同的东西,记忆实际上会被泄露。