小编Rom*_*hev的帖子

如何安全地将new创建的对象传递给构造函数

我有几个类看起来像这样:

struct equation {};

struct number: equation {
    number(int n): value(n) {}

  private:
    int value;
};

struct operation: equation {
    operation(const equation* left, const equation* right)
        : left(left), right(right) {}

  private:
    std::unique_ptr<equation> left, right;
};
Run Code Online (Sandbox Code Playgroud)

它们的设计方式operation取决于传递给构造函数的指针的所有权.

我的问题是如何修改此类以便能够以下一种方式安全地使用它:

operation op(new number(123), new number(456));
Run Code Online (Sandbox Code Playgroud)

在我看来,如果创建第一个对象而第二个不是(比如从number构造函数抛出异常)那么它就是内存泄漏 - 没有人会删除指向第一个数字的指针.

这种情况怎么办?我不想按顺序分配对象,如果出现故障则删除它们 - 它太冗长了.

c++ pointers memory-management class-design c++11

2
推荐指数
1
解决办法
98
查看次数

标签 统计

c++ ×1

c++11 ×1

class-design ×1

memory-management ×1

pointers ×1