我找不到这个简单问题的答案:
给出一个抛出其构造函数的类:
class Foo {
Foo() { throw std::logic_error(); }
}
如果我使用new
运算符从这个类创建一个新对象,那么我是否泄漏了创建的对象?
new Foo(); // << does this leak the Foo?
答案 0 :(得分:1)
不,你不会有内存泄漏。但是,公平地说投掷构造函数通常被认为是一种不好的做法,因为你可能最终会构造一个对象(取决于你的类),然后你应该依靠你的类的用户来检测构造失败测试某种标志变量。
答案 1 :(得分:0)
不,如果Foo
的构造函数抛出,则表示Foo
对象从未存在过。那里没有泄漏。如果您拥有先验初始化的数据成员,那么这些成员的各个析构函数将在异常离开构造函数的块范围