相关疑难解决方法(0)

什么是复制和交换习语?

这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?

虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:

c++ c++-faq copy-constructor assignment-operator copy-and-swap

1907
推荐指数
5
解决办法
34万
查看次数

如何在不修改操作数的情况下使用运算符重载链?

假设我们有这个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对象引用并将前两个的总和存储在第三个中,但我愿意打赌必须有一些方法来使+重载发生的方式我想要.

所以问题是:有没有什么方法可以使用一系列操作符重载,它们不会在不引起内存泄漏的情况下修改操作数?

c++ memory memory-leaks overloading operator-keyword

6
推荐指数
1
解决办法
5438
查看次数