我在整个互联网上搜索了如何正确实现 + 运算符,我发现的所有结果都执行以下步骤:
const MyClass MyClass::operator+(const MyClass &other) const
{
MyClass result = *this; // Make a copy of myself. Same as MyClass result(*this);
result += other; // Use += to add other to the copy.
return result; // All done!
}
我对这个“过程”有几个问题:
以这种方式实现 + 运算符不是很愚蠢,它在第一行调用赋值运算符(复制类),然后在返回中调用复制构造函数(它也复制类,因为返回是按价值计算,所以它会破坏第一个副本并创建一个新副本.. 坦率地说,这不是很聪明......)
当我写 a=b+c 时,b+c 部分创建类的新副本,然后 'a=' 部分将副本复制给自己。谁删除了 b+c 创建的副本?
有没有更好的方法来实现 + 运算符而无需两次处理类,也没有任何内存问题?
提前致谢