【问题标题】:Do I leak the constructed object when using new to create an object whose constructor throws? [duplicate]使用 new 创建构造函数抛出的对象时,是否会泄漏构造的对象? [复制]
【发布时间】:2017-01-28 10:38:38
【问题描述】:
我找不到这个简单问题的答案:
给定一个在其构造函数中抛出的类:
class Foo {
Foo() { throw std::logic_error(); }
}
如果我使用new 运算符从此类创建一个新对象,那么我是否会泄漏创建的对象?
new Foo(); // << does this leak the Foo?
【问题讨论】:
标签:
c++
memory-management
memory-leaks
【解决方案1】:
不,如果Foo 的构造函数抛出,这意味着Foo 对象从未存在过。那里没有泄漏。如果您有已预先初始化的数据成员,则这些成员的单独析构函数将在异常离开构造函数的 block-scope
时运行
【解决方案2】:
不,您不会发生内存泄漏。但是,公平地说,通常认为抛出构造函数是一种不好的做法,因为您最终可能会构建一个对象的一半(取决于您的类),然后您应该依靠您的类的用户来检测构造失败测试某种标志变量。