在c ++中覆盖+运算符时分配内存

时间:2011-09-28 00:34:28

标签: c++ visual-c++

我正在创建一个自定义对象并覆盖+运算符。我返回一个相同类型的新对象。在这个方法中分配内存是不好的做法吗?因为我然后我需要删除超出范围的内存。

2 个答案:

答案 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+=和一个复制构造函数,如果您没有+= - 只需将赋值操作直接放在那里。阅读链接了解更多详情。