2

以下のステートメントを検討してください:-

Class A a = b;//Where is b is existing object of class A.

クラス A には、コピー コンストラクターと代入演算子の両方がオーバーロード (実装) されています。したがって、この場合、上記のステートメント、コピー コンストラクター、代入演算子、またはその両方に対してどちらが呼び出されますか?

4

2 に答える 2

6

これは、コピーの初期化と呼ばれます。

コピーの初期化は次のように定義されます。

T t2 = t1;

タイプに応じて、次のt12 つのシナリオが考えられます。

がタイプt1でない場合: T

  • 暗黙的な変換シーケンスを使用しt1 に変換しようとし、T
  • t2次に、コピー コンストラクターを呼び出して、作成されたオブジェクトを にコピーします。

t1次のタイプ の場合T:

  • コピーコンストラクターt1t2呼び出してコピーします。

ただし、コピー コンストラクターの呼び出しは、コピー省略によって省略される可能性があることに注意ください。


ここには割り当てはありません。割り当ては、既に構築されたオブジェクトを別のオブジェクトに割り当てる場合にのみ発生します。あなたのコードステートメントには、単一のステートメントでの構築と値の割り当てが含まれているため、割り当て自体はありません。

于 2013-03-19T07:10:57.377 に答える
2

この場合、コピー コンストラクターが呼び出されます。「クラス A」クラス オブジェクト「a」は、既に構築されている「クラス A」オブジェクト b の値をコピーして構築されるためです。

既に作成された 2 つのオブジェクトに作用する代入演算子が呼び出される可能性はありません。

于 2013-03-19T07:38:33.890 に答える