-1

OK、私は「効果的な 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 に答える