深いコピーと浅いコピー: いつどちらを選択すべきですか?

DDD
リリース: 2024-10-28 00:15:29
オリジナル
584 人が閲覧しました

 Deep vs. Shallow Copy: When Should You Choose Which?

プログラミングにおける深いコピーと浅いコピー

浅いコピーには、元のデータと同じ基礎となるデータを参照する新しいオブジェクトの作成が含まれます。対照的に、深いコピーでは、元のオブジェクトに関連付けられたすべてのデータの独立した複製を含む新しいオブジェクトが構築されます。

次の C クラスを考えてみましょう:

<code class="c++">class X {
public:
    int i;
    int *pi;
    X() : pi(new int) {}
    X(const X& copy) : i(copy.i), pi(copy.pi) {}
};</code>
ログイン後にコピー

この場合、浅いコピーが行われます。元の X オブジェクトとコピーされた X オブジェクトの両方で、pi を割り当てるときに同じ int オブジェクトを指します:

<code class="c++">X original;
X copy(original);</code>
ログイン後にコピー

一方、ディープ コピーには、新しい int オブジェクトが割り当てられるコピー コンストラクターのステップが含まれます:

<code class="c++">class X {
public:
    int i;
    int *pi;
    X() : pi(new int) {}
    X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {}
};</code>
ログイン後にコピー

結果として、コピーされた X オブジェクトは、元のオブジェクトと同じ値を持つ独自の int オブジェクトを持つことになります。

当初、デフォルトのコピー コンストラクターは常に浅いコピーを実行すると考えられていました。ただし、その挙動は各メンバーのタイプに依存することが明らかになりました。標準ではメンバー単位のコピーが指定されています。これは、スカラー型 (この例では int など) が組み込みの代入演算子を使用してコピーされることを意味します。

したがって、深いコピーと浅いコピーの選択は、アプリケーションの特定の要件によって異なります。およびコピーされるデータの特性。

以上が深いコピーと浅いコピー: いつどちらを選択すべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート