基于此链接添加分配使用堆栈重载并传递值:
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;
}
这是对的吗?我应该在哪里发布堆?还有更好的办法吗?
答案 0 :(得分:3)
由于C ++ 11,按值复制不再具有与之相关的旧耻辱感。允许编译器删除副本。如果做不到这一点,他们需要在复制可用的情况下移动变量。一种非常常见的情况是当您返回自动函数变量时。在您的第一个示例中,result
同时至少被移动。它很可能是NRVOed。因此,如果需要,为complx
实现移动构造函数并使用第一个签名。
答案 1 :(得分:0)
除非您自己手动重新分配,否则没有正确的方法可以释放分配的内存。您可以使用SmartPointers进行分配。完成后它会释放内存。释放它的另一种方法是垃圾收集,这在C ++中是不存在的。