我有几个类看起来像这样:
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
构造函数抛出异常)那么它就是内存泄漏 - 没有人会删除指向第一个数字的指针.
这种情况怎么办?我不想按顺序分配对象,如果出现故障则删除它们 - 它太冗长了.