我正在创建一个自定义对象并覆盖+运算符。我返回一个相同类型的新对象。在这个方法中分配内存是不好的做法吗?因为我然后我需要删除超出范围的内存。
答案 0 :(得分:4)
是的,没有进一步的信息,这很糟糕。
通常你这样做:
struct X
{
int m_i;
X(int i) : m_i(i) { }
X operator+(const X& another) const
{
return X(m_i + another.m_i); // note, not new X(...)
}
}
也就是说,如果你真的必须动态分配,你可以返回unique_ptr。
答案 1 :(得分:2)
有一个很好的例子,即重载operator+
以返回对象的新实例,没有动态分配。
源是here,有很多关于如何重载运算符的解释。
例如:
// Add this instance's value to other, and return a new instance
// with the result.
const MyClass MyClass::operator+(const MyClass &other) const {
return MyClass(*this) += other;
}
假设您实现了operator+=
和一个复制构造函数,如果您没有+=
- 只需将赋值操作直接放在那里。阅读链接了解更多详情。