58

オーバーライドoperator=すると、コピーコンストラクターは自動的にnew演算子を使用しますか?同様に、コピーコンストラクターを定義すると、コピーコンストラクターoperator=から動作が自動的に「継承」されますか?

4

6 に答える 6

50

いいえ、それらは異なる演算子です。

コピーコンストラクタは、新しいオブジェクトを作成するためのものです。既存のオブジェクトを新しく構築されたオブジェクトにコピーします。コピーコンストラクタは、古いインスタンスから新しいインスタンスを初期化するために使用されます。変数を値で関数に渡すとき、または関数からの戻り値として呼び出す場合は、必ずしも呼び出されません。

代入演算子は、既存のオブジェクトを処理するためのものです。代入演算子は、既存のインスタンスを右辺値と同じ値に変更するために使用されます。つまり、内部動的メモリがある場合は、インスタンスを破棄して再初期化する必要があります。

便利なリンク:

于 2011-03-20T11:45:27.717 に答える
13

いいえ。コピーコンストラクターを定義しない限り、デフォルトが生成されます(必要な場合)。operator =を定義しない限り、デフォルトが生成されます(必要な場合)。それらは相互に使用せず、個別に変更できます。

于 2011-03-20T11:42:51.190 に答える
0

いいえ、同じオペレーターではありません。

于 2011-03-20T11:43:21.500 に答える