在c++中重写+操作符时可视地分配内存

visual allocating memory when overriding + operator in c++

本文关键字:可视 分配 内存 操作符 c++ 重写      更新时间:2023-10-16

我正在创建一个自定义对象并覆盖+操作符。我将返回一个相同类型的新对象。在这个方法中分配内存是不好的做法吗?因为我需要在作用域之外删除内存。

是的,如果没有进一步的信息,这是不好的。

通常你这样做:

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。

有一个很好的例子,重载operator+返回对象的实例作为结果,没有动态分配。

源代码在这里,有很多关于如何重载操作符的解释。

示例如下:

  // 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+=和一个复制构造函数,如果你没有+= -只要把赋值操作直接放在那里。