15

あるインタビューでこの質問をされましたが、なぜこの概念がないのか正確にはわかりませんでした。

私にお知らせください。

4

3 に答える 3

30

合理的なデフォルトの実装がないため、言語には組み込まれていません。

コピー コンストラクターは、クローン作成と同じ多くのあいまいさに悩まされます。たとえば、浅いコピーと深いコピーのどちらを作成するかは、特定の状況によって異なります。

プロパティを持つOrderクラスがあるとしCustomerます。そのコピー コンストラクターは新しい顧客を作成する必要がありますか、それとも元のインスタンスを指す必要がありますか? おそらく元のインスタンスですが、どうOrder.Paymentですか?

さらに悪いことに、ディープ コピーを実行たい場合でも、下位オブジェクトのコンストラクタ (または同等のファクトリ メソッド) にアクセスできない可能性があるため、すべての下位オブジェクトを作成することさえできない場合があります。

それだけでは不十分な場合は、Java 設計の問題に関するこの記事で、他のいくつかの問題 (型の切り捨てなど) を強調しています。

于 2010-04-20T15:31:54.140 に答える
7

C# がコピー コンストラクターの概念をサポートしていないのはどのような点ですか? 好きなだけ深くコピーするものを自由に作成できます。

于 2010-04-20T15:27:32.927 に答える
1

そうじゃない?

class Foo
{
   public Foo (Foo other)   // copy ctor
   { ... }
}

しかし、C++ (コピー コンストラクターという用語が造られた場所) で適用される他の規則については、少しさびているかもしれません。

于 2010-04-20T15:27:11.907 に答える