使用new创建构造函数抛出的对象时,是否会泄漏构造的对象?

时间:2016-09-20 13:17:20

标签: c++ memory-management memory-leaks

我找不到这个简单问题的答案:

给出一个抛出其构造函数的类:

class Foo { 
    Foo() { throw std::logic_error(); }
}

如果我使用new运算符从这个类创建一个新对象,那么我是否泄漏了创建的对象?

new Foo(); // << does this leak the Foo?

2 个答案:

答案 0 :(得分:1)

不,你不会有内存泄漏。但是,公平地说投掷构造函数通常被认为是一种不好的做法,因为你可能最终会构造一个对象(取决于你的类),然后你应该依靠你的类的用户来检测构造失败测试某种标志变量。

答案 1 :(得分:0)

不,如果Foo的构造函数抛出,则表示Foo对象从未存在过。那里没有泄漏。如果您拥有先验初始化的数据成员,那么这些成员的各个析构函数将在异常离开构造函数的块范围

时运行
相关问题