昨日、C# でのオブジェクトのコピーについて質問しましたが、ほとんどの回答は、ディープ コピーとシャロー コピーの違いと、特定のコピー コンストラクター (または演算子、または関数) が両方のコピー バリアントのどちらであるかを明確にする必要があるという事実に焦点を当てていました。実装します。これは奇妙だと思います。
私は、コピーに大きく依存する言語である C++ で多くのソフトウェアを作成しましたが、複数のコピー バリアントが必要になることはありませんでした。私がこれまでに使用した唯一の種類のコピー操作は、「十分な深さのコピー」と呼んでいるものです。次のことを行います。
- オブジェクトがメンバー変数の所有権を持っている場合 ( compositionを参照)、再帰的にコピーされます。
- オブジェクトがメンバー変数に対する所有権を持たない場合 ( aggregationを参照)、リンクのみがコピーされます。
さて、私の質問は 3 つあります。
- 1) オブジェクトが複数のコピーバリアントを必要とすることはありますか?
- 2) コピー関数は、それが実装するコピーバリアントを明確にする必要がありますか?
- 3) 余談ですが、私が「十分に深いコピー」と呼んでいるものについて、より適切な用語はありますか? 「ディープコピー」という用語の定義について、関連する質問をしました。