0

「メソッドとの間で可変オブジェクトへの参照の配列を渡したり返したりしているとします。参照コピーのみを作成しても安全ですか?浅いコピーを作成しても安全ですか?」

これは私のクラスに出された学習問題で、答えは「どちらも安全ではありません。この場合、ディープ コピーだけが安全です。」

どうしてこれなの?

4

3 に答える 3

1

オブジェクトが変更可能である場合、それは、オブジェクトへの参照を持つすべてのクライアントがそれらを変更できることを意味します。これにより、競合状態、デッドロック、およびその他の楽しくない動作が発生する可能性があります。ただし、オブジェクトを使用する直前にディープ コピーを作成すると、オブジェクトのスナップショットを効率的に操作できます。これにより、他のクライアントがそれらを変更できないことが保証され、同時実行性や正確性に関する懸念がなくなります。

于 2013-11-11T15:20:52.600 に答える
1

最初のケースでは、元の配列要素とオブジェクトの両方を変更できます。2 番目のケースでは、元の配列にアクセスできなくなったため、オブジェクトのみを変更できます。ディープ コピーを実行すると、まったく異なる配列とオブジェクトが処理されるため、もちろん安全です。

于 2013-11-11T15:20:55.787 に答える