-1

好的,我正在阅读“有效的 C++”,第 12 条说请不要在复制构造函数中调用复制赋值。但是在我尝试这样做之后,它确实有效。所以我想问为什么,我不能在复制构造函数中重用复制赋值代码?

4

2 回答 2

0

假设您在复制构造函数中使用复制赋值运算符。然后你就失去了为赋值运算符实现复制和交换习语的能力:

struct A
{
   A (const A &a)
   {
     *this = a; // Assignment to a not yet constructed object is not well
   }

   A &operator=(A a) // Pass by value
   {
      // ...
   }
};

A a1, a2;
a1 = a2; // Infinite recursion!

这是不可能的,并且会发生无限递归。

于 2013-10-27T09:08:00.697 回答
0

构造函数创建一个新对象;赋值运算符修改现有对象。您不能使用赋值运算符来创建新对象:它不知道如何执行此操作,即使它似乎在简单的情况下也有效。

于 2013-10-27T14:22:03.440 回答