深いコピーと浅いコピー: 詳細を見る
オブジェクト指向プログラミングでは、深いコピーと浅いコピーの違いを理解することが重要です。区別を明確にするために概念を詳しく見てみましょう。
浅いコピー
浅いコピーは、元のオブジェクトと同じオブジェクトを参照する新しいオブジェクトを作成します。これは、オブジェクトの 1 つが変更されると、元のオブジェクトとコピーされたオブジェクトの両方に影響することを意味します。
次の例を考えてみましょう:
<code class="cpp">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
このシナリオでは、pi メンバーは同じものを指します。
ディープ コピー
対照的に、ディープ コピーは新しいオブジェクトを作成し、元のオブジェクトのすべてのメンバーのクローンを作成します。元のオブジェクトとコピーされたオブジェクトの間に共有オブジェクトはありません。
変更された例は次のとおりです:
<code class="cpp">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {} };</code>
この場合、元の X オブジェクトとコピーされた X オブジェクトの pi メンバーは異なる整数を指します。
Copy Constructor
オブジェクトのコピーを作成する場合、コピー コンストラクターが使用されます。デフォルトのコピー コンストラクター (プログラマによって明示的に定義されていない場合) は、独自のカスタム コピー コンストラクターを持つメンバーを除き、通常、浅いコピーを実行します。
ただし、コピー コンストラクターの動作は次のような場合があることに注意してください。含まれる特定のデータ メンバーによって異なります。メンバーによっては、深いコピー、浅いコピー、またはそれらの組み合わせを実行する場合があります。
以上がディープ コピーとシャロー コピー: データのクローンを作成する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。