オブジェクトの割り当てとコピー: 割り当て: "= 演算子によってオーバーロードされます
User a(10),b;
b = a;
コピー: コピー コンストラクターを呼び出します
User b;
User a(b);
or
User a = b;//User a(b); と同等
と代入の違いは、代入は既存のオブジェクト (割り当てられたオブジェクトは実装および定義されている) に値を割り当てることであるのに対し、コピーは作成することです。オブジェクトを最初から作成する 新しいオブジェクトを作成し、既存のオブジェクトと同一にします。
浅いコピーと深いコピー: オブジェクト内にポインター メンバーが存在する場合、そのポインター メンバーのアドレスのみが新しく作成されたオブジェクトにコピーされるため、両方のオブジェクトのポインター メンバーは同じメモリ領域を指します。リリース中に繰り返しリリースが発生します。 コピー コンストラクターを手動で定義する必要があります。コンストラクターでは、異なるオブジェクトのポインター メンバーが異なるメモリ領域を指すように新しいメモリが割り当てられます。
コピー コンストラクターが使用される場合の 3 つの状況: 1. 新しいオブジェクトを作成し、それを同じ型の別のオブジェクトで初期化する必要がある。 2. 関数のパラメーターがクラスのオブジェクトである場合、関数を呼び出すときに実パラメータをコピーし、実パラメータに従って仮パラメータをコピーします。システムはコピー コンストラクタを呼び出すことによって実装されます。 3. 関数の戻り値はクラスのオブジェクトです。関数呼び出しでは、関数内のオブジェクトを一時オブジェクトにコピーし、呼び出しポイントの関数に渡す必要があります。