附加赋值重载(通过指针传递)

addition assignment overloading (passing by pointer)

本文关键字:指针 赋值 重载      更新时间:2023-10-16

基于此链接添加赋值重载使用堆栈和按值传递:

http://www - 01. - ibm.com/support/knowledgecenter/ssgh3r_8.0.0/com.ibm.xlcpp8a.doc/language/ref/cplr318.htm%23cplr318?lang=en

complx complx::operator+ (const complx& c) const
{
      complx result;
      result.real = (this->real + c.real);
      result.imag = (this->imag + c.imag);
      return result;
}

但是我想用这样的方式:

 complx& complx::operator+ (const complx& c) const
    {
          complx result = new complx;
          result->real = (this->real + c.real);
          result->imag = (this->imag + c.imag);
          return *result;
    }

正确吗?我应该在哪里释放堆?有更好的办法吗?

自c++ 11以来,按值复制不再具有与之相关的旧污名。允许编译器省略副本。如果做不到这一点,它们就需要在可复制的情况下移动变量。一种非常常见的情况是当您返回一个自动函数变量时。在您的第一个示例中,result至少移动了一次。它很可能会被撤销。因此,如果需要,为complx实现一个move构造函数,并使用第一个签名。

没有合适的方法来释放方法中分配的内存,除非您自己手动重新分配。您可以使用smartpointer进行分配。当你用完后,它会释放内存。另一种释放它的方法是垃圾收集,这在c++中不存在。