深いコピーと浅いコピー
質問:
両者の主な違いは何ですか?深いコピーと浅いコピー?
答え:
浅いコピー:
例:
<code class="c++">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
この浅いコピーでは、pi は元のオブジェクトとコピーされたオブジェクトの両方で同じ int オブジェクトを参照します。
ディープ コピー:
例:
<code class="c++">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>
このディープ コピーでは、pi は元の値と同じ値を持つ新しい int オブジェクトを指します。
コピー コンストラクターの種類:
デフォルトのコピー コンストラクターは、各メンバーのコピー コンストラクターの動作によって異なります。
例:
In次の例では、デフォルトのコピー コンストラクターは、その実装により std::vector メンバーのディープ コピーを作成します。
<code class="c++">class Y { private: std::vector<int> v; public: Y() {} Y(const Y& copy) : v(copy.v) {} };</code>
この場合、std::vector のコピー コンストラクターは、そのメンバーのディープ コピーを作成します。内容。
以上がディープ コピーとシャロー コピー: データの真のコピーが必要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。