我无法找到答案,这个简单的问题:使用new创建构造函数抛出的对象时,是否泄漏构造的对象?
因为在它的构造函数抛出了一个类:
class Foo {
Foo() { throw std::logic_error(); }
}
,如果我创建使用new
操作此类的新对象,然后做我泄露创建的对象?
new Foo(); // << does this leak the Foo?
我无法找到答案,这个简单的问题:使用new创建构造函数抛出的对象时,是否泄漏构造的对象?
因为在它的构造函数抛出了一个类:
class Foo {
Foo() { throw std::logic_error(); }
}
,如果我创建使用new
操作此类的新对象,然后做我泄露创建的对象?
new Foo(); // << does this leak the Foo?
将运行不,您不会有内存泄漏。然而,公平地说,抛出构造函数通常被认为是不好的做法,因为你最终可能会构造一个对象(取决于你的类),然后你应该依靠你的类的用户来检测构造失败测试某种标志变量。
不,如果Foo
的构造函数抛出,这意味着一个Foo
对象从来没有存在过。那里没有泄漏。如果您有数据成员已被初始化,那么这些成员的单个析构函数将作为例外离开构造函数的块范围