C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++の代入演算子とコピーコンストラクターの違いは何ですか?


コピーコンストラクタと代入演算子は、あるオブジェクトを別のオブジェクトに初期化するために使用されます。それらの主な違いは、コピーコンストラクタが新しいオブジェクト用に個別のメモリブロックを作成することです。ただし、代入演算子は新しいメモリ空間を作成しません。参照変数を使用して、前のメモリブロックを指します。

コピーコンストラクタ(構文)

classname (const classname &obj) {
   // body of constructor
}

代入演算子(構文)

classname Ob1, Ob2;
Ob2 = Ob1;

コピーコンストラクタと代入演算子の詳細な違いを見てみましょう。


コピーコンストラクタ
代入演算子
Copyコンストラクターは基本的にオーバーロードされたコンストラクターです
代入演算子は基本的に演算子です。
これにより、新しいオブジェクトが既存のオブジェクトで初期化されます
これにより、あるオブジェクトの値が、両方ともすでに存在する別のオブジェクトに割り当てられます。
コピーコンストラクタは、既存のオブジェクトを使用して新しいオブジェクトを作成するときに使用されます
この演算子は、既存のオブジェクトを新しいオブジェクトに割り当てるときに使用されます。
両方のオブジェクトが別々のメモリ位置を使用します。
1つのメモリ位置が使用されていますが、異なる参照変数が同じ位置を指しています。
クラスでコピーコンストラクターが定義されていない場合、コンパイラーはコピーコンストラクターを提供します。
代入演算子がオーバーロードされていない場合、ビット単位のコピーが作成されます


  1. C ++のドット(。)演算子と->の違いは何ですか?

    ドットと矢印の演算子は、どちらもC++でクラスのメンバーにアクセスするために使用されます。それらはさまざまなシナリオで使用されます。 C ++では、class、struct、またはunionとして宣言された型は、「クラス型」と見なされます。したがって、以下は3つすべてを指します。 a.bは、bがオブジェクトのメンバー(またはオブジェクトへの参照[1])である場合にのみ使用されます。したがって、a.bの場合、aは常にクラスの実際のオブジェクト(またはオブジェクトへの参照)になります。 a→bは基本的に(* a).bの省略表記です。つまり、aがオブジェクトへのポインタである場合、a→bはポイ

  2. Pythonの=演算子と==演算子の違いは何ですか?

    Pythonでは、シンボルは割り当てとして定義されます オペレーター。左側に1つの変数、右側に式が必要です。右側の式の値は、左側の変数に割り当てられます。変数の式と名前は互換性がありません。 >>> a=10 >>> b=20 >>> c=a+b >>> a,b,c (10, 20, 30) >>> a+b=c SyntaxError: can't assign to operator ==記号は比較演算子であり、等しいと呼ばれます オペレーター。いずれかの側のオペランドが等しい場合はtrueを