この記事では、PHP のコピー コンストラクターと代入演算子のオーバーロードについて詳しく紹介します。詳しく知りたい学生は参照してください。
オブジェクトの割り当てとコピー: 割り当て: "= 演算子を介してオーバーロードされます
コードは次のとおりです | コードをコピー |
ユーザー a(10),b; b = a; コピー: コピーコンストラクターを呼び出します ユーザーb; ユーザー a(b); または User a = b;//User a(b); と同等 |
代入と割り当ての違いは、既存のオブジェクト (割り当てられたオブジェクトは実装および定義されている) に値を割り当てることですが、コピーは新しいオブジェクトを最初から作成して既存のオブジェクトと同じにすることです。
浅いコピーと深いコピー: オブジェクト内にポインター メンバーが存在する場合、そのポインター メンバーのアドレスのみが新しく作成されたオブジェクトにコピーされるため、両方のオブジェクトのポインター メンバーは同じメモリ領域を指します。リリース中に繰り返しリリースが発生します。 コピー コンストラクターを手動で定義する必要があります。コンストラクターでは、異なるオブジェクトのポインター メンバーが異なるメモリ領域を指すように新しいメモリが割り当てられます。
コピー コンストラクターが使用される場合の 3 つの状況: 1. 新しいオブジェクトを作成し、それを同じ型の別のオブジェクトで初期化する必要がある。 2. 関数のパラメーターがクラスのオブジェクトである場合、関数を呼び出すときに実パラメータをコピーし、実パラメータに従って仮パラメータをコピーします。システムはコピー コンストラクタを呼び出すことによって実装されます。 3. 関数の戻り値はクラスのオブジェクトです。関数呼び出しでは、関数内のオブジェクトを一時オブジェクトにコピーし、呼び出しポイントの関数に渡す必要があります。
コードは次のとおりです | コードをコピー |
ユーザーgetUser() { ユーザーの温度 温度を戻す; } int main() { User user = getUser();//getUser(); を呼び出す} |
getUser() 関数の呼び出しが終了すると、getUser で作成されたオブジェクト temp のライフサイクルが終了する (破棄される) ため、return ステートメントを実行するときに、temp を main に戻す代わりに、User クラスのコピー コンストラクターを呼び出します。新しいオブジェクトをコピーしてユーザーに割り当てます。