10

不変オブジェクトにコピーコンストラクタが不要なのはなぜですか?これを説明してください。

4

4 に答える 4

13

値は変更できないため、すべての場合に同じオブジェクトを参照するのは良いことです。いわば「余分なコピー」を用意する必要はありません。

于 2010-03-11T18:14:42.530 に答える
4

これは、特に生涯に関して、言語に依存する質問です。しばらくの間、それらを忘れましょう。

コピーコンストラクターは、1つのオブジェクトを取得して、その完全に独立したコピーを作成できるという点で価値があります。これは、最初のオブジェクトから独立して2番目のオブジェクトを変更できるという点で価値があります。または、コンポーネントがプライベートコピーを作成して、オブジェクトをその下から変更する他のコンポーネントから自身を保護することもできます。

不変オブジェクトは変更できません。変更されないオブジェクトのコピーを作成することに価値はありません。

さて、もう一度生涯について話しましょう。C ++のような言語では、コピーコンストラクターを使用して、メモリ/ライフタイムの問題を回避することもできます。たとえば、を使用するAPIを作成していSomeType*て、メソッドの存続期間よりも長く保持したい場合です。C ++では、これを行う最も信頼できる方法は、コピーコンストラクターを介してオブジェクトのコピーを作成することです。

于 2010-03-11T18:22:37.757 に答える
2

これは言語に多少依存します:

ただし、多くの言語ではコピーコンストラクタが必要です。提供しない場合、言語は暗黙的に生成します。

ただし、不変オブジェクトの場合、デフォルトのコピーコンストラクターが(通常)すべての値の浅いコピーを実行するため、これは通常は問題ありません。可変データ型(つまり、他のオブジェクトへの内部オブジェクト参照を含む)では、コピーはその中にカプセル化された参照/ポインターのみをコピーするため、通常、浅いコピーは適切な選択ではありません。

于 2010-03-11T18:14:51.600 に答える
1

不変オブジェクトの値は変更できないため、これは非常に自然なことです。

于 2010-03-11T18:54:48.177 に答える