【问题标题】: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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-25
        • 1970-01-01
        相关资源
        最近更新 更多