C ++:复制构造函数中的调用复制赋值

时间:2013-10-27 08:59:18

标签: c++ constructor copy variable-assignment

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

2 个答案:

答案 0 :(得分:0)

假设您在copy-constructor中使用copy-assignment运算符。然后你就失去了为赋值运算符实现copy-and-swap惯用语的能力:

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!

不可能发生无限递归。

答案 1 :(得分:0)

构造函数创建一个新对象;赋值运算符修改现有对象。你不能使用赋值运算符来创建一个新对象:它不知道如何做到这一点,即使它似乎在简单的情况下工作。