这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?
虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:
c++ c++-faq copy-constructor assignment-operator copy-and-swap
假设我们有这个A类:
class A
{
public:
int a;
A(int b)
{
a = b;
}
};
Run Code Online (Sandbox Code Playgroud)
我想创建一个+重载,这样我就可以像这样使用它
A a(1),b(2),c(3),&d;
d = a + b + c;
Run Code Online (Sandbox Code Playgroud)
不修改每个对象的内容.下一个合乎逻辑的事情是每次分配一块新的内存,如下所示:
A &operator+ (const A &b)
{
A *c = new A(a+b.a);
return *c;
}
Run Code Online (Sandbox Code Playgroud)
但这会产生一个新问题:中间结果丢失,导致内存泄漏.我可以通过制作一个静态函数来轻松解决这个问题,该函数需要三个A对象引用并将前两个的总和存储在第三个中,但我愿意打赌必须有一些方法来使+重载发生的方式我想要.
所以问题是:有没有什么方法可以使用一系列操作符重载,它们不会在不引起内存泄漏的情况下修改操作数?