以下のステートメントを検討してください:-
Class A a = b;//Where is b is existing object of class A.
クラス A には、コピー コンストラクターと代入演算子の両方がオーバーロード (実装) されています。したがって、この場合、上記のステートメント、コピー コンストラクター、代入演算子、またはその両方に対してどちらが呼び出されますか?
以下のステートメントを検討してください:-
Class A a = b;//Where is b is existing object of class A.
クラス A には、コピー コンストラクターと代入演算子の両方がオーバーロード (実装) されています。したがって、この場合、上記のステートメント、コピー コンストラクター、代入演算子、またはその両方に対してどちらが呼び出されますか?
これは、コピーの初期化と呼ばれます。
コピーの初期化は次のように定義されます。
T t2 = t1;
タイプに応じて、次のt1
2 つのシナリオが考えられます。
がタイプ
t1
でない場合:T
t1
て型 に変換しようとし、T
t2
次に、コピー コンストラクターを呼び出して、作成されたオブジェクトを にコピーします。
t1
次のタイプ の場合T
:
t1
をt2
呼び出してコピーします。ただし、コピー コンストラクターの呼び出しは、コピー省略によって省略される可能性があることに注意してください。
ここには割り当てはありません。割り当ては、既に構築されたオブジェクトを別のオブジェクトに割り当てる場合にのみ発生します。あなたのコードステートメントには、単一のステートメントでの構築と値の割り当てが含まれているため、割り当て自体はありません。
この場合、コピー コンストラクターが呼び出されます。「クラス A」クラス オブジェクト「a」は、既に構築されている「クラス A」オブジェクト b の値をコピーして構築されるためです。
既に作成された 2 つのオブジェクトに作用する代入演算子が呼び出される可能性はありません。