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

时间:2014-07-10 05:04:29

标签: c++

基于此链接添加分配使用堆栈重载并传递值:

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;
    }

这是对的吗?我应该在哪里发布堆?还有更好的办法吗?

2 个答案:

答案 0 :(得分:3)

由于C ++ 11,按值复制不再具有与之相关的旧耻辱感。允许编译器删除副本。如果做不到这一点,他们需要在复制可用的情况下移动变量。一种非常常见的情况是当您返回自动函数变量时。在您的第一个示例中,result同时至少被移动。它很可能是NRVOed。因此,如果需要,为complx实现移动构造函数并使用第一个签名。

答案 1 :(得分:0)

除非您自己手动重新分配,否则没有正确的方法可以释放分配的内存。您可以使用SmartPointers进行分配。完成后它会释放内存。释放它的另一种方法是垃圾收集,这在C ++中是不存在的。