あるインタビューでこの質問をされましたが、なぜこの概念がないのか正確にはわかりませんでした。
私にお知らせください。
合理的なデフォルトの実装がないため、言語には組み込まれていません。
コピー コンストラクターは、クローン作成と同じ多くのあいまいさに悩まされます。たとえば、浅いコピーと深いコピーのどちらを作成するかは、特定の状況によって異なります。
プロパティを持つOrder
クラスがあるとしCustomer
ます。そのコピー コンストラクターは新しい顧客を作成する必要がありますか、それとも元のインスタンスを指す必要がありますか? おそらく元のインスタンスですが、どうOrder.Payment
ですか?
さらに悪いことに、ディープ コピーを実行したい場合でも、下位オブジェクトのコンストラクタ (または同等のファクトリ メソッド) にアクセスできない可能性があるため、すべての下位オブジェクトを作成することさえできない場合があります。
それだけでは不十分な場合は、Java 設計の問題に関するこの記事で、他のいくつかの問題 (型の切り捨てなど) を強調しています。
C# がコピー コンストラクターの概念をサポートしていないのはどのような点ですか? 好きなだけ深くコピーするものを自由に作成できます。
そうじゃない?
class Foo
{
public Foo (Foo other) // copy ctor
{ ... }
}
しかし、C++ (コピー コンストラクターという用語が造られた場所) で適用される他の規則については、少しさびているかもしれません。