ホームページ  >  記事  >  バックエンド開発  >  ディープ コピーとシャロー コピー: データのクローンを作成する必要があるのはどのような場合ですか?

ディープ コピーとシャロー コピー: データのクローンを作成する必要があるのはどのような場合ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 00:15:02586ブラウズ

  Deep Copy vs. Shallow Copy: When Do I Need to Clone the Data?

深いコピーと浅いコピー: 詳細を見る

オブジェクト指向プログラミングでは、深いコピーと浅いコピーの違いを理解することが重要です。区別を明確にするために概念を詳しく見てみましょう。

浅いコピー

浅いコピーは、元のオブジェクトと同じオブジェクトを参照する新しいオブジェクトを作成します。これは、オブジェクトの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。