2010-03-11 6 views
7

Warum sind Kopierkonstruktoren für unveränderliche Objekte unnötig? Bitte erläutern Sie das für mich.Warum sind Kopierkonstruktoren für unveränderbare Objekte unnötig?

+0

Warum Clone-Methode verwendet? – Jothi

+0

Mögliches Duplikat von [Was macht die Veröffentlichung unveränderlicher Objekte ohne sichere Veröffentlichungstechniken möglich?] (Http://stackoverflow.com/questions/17000617/what-makes-immutable- objects-to-be-published-without-safe-publication -Techniken) –

Antwort

10

Da sich der Wert nicht ändern kann, ist es genauso gut, in allen Fällen das gleiche Objekt zu referenzieren, so dass es nicht nötig ist, eine "Extra-Kopie" zu haben.

+0

+1 Es hat keinen Sinn, zwei Instanzen von gleichen unveränderlichen Objekten zu haben - benutze einfach überall dieselbe Instanz. – Grundlefleck

2

Dies ist etwas sprachabhängig:

erfordern jedoch viele Sprachen eine Kopie Konstruktor. Wenn Sie keinen angeben, generiert die Sprache implizit einen.

Mit einem unveränderlichen Objekt ist dies jedoch in der Regel in Ordnung, da der Standardkopiekonstruktor (in der Regel) eine flache Kopie aller Werte erstellt. Bei einem veränderbaren Datentyp (dh: enthält interne Objektreferenzen zu anderen Objekten), ist flaches Kopieren in der Regel eine schlechte Wahl, da die Kopie nur den darin eingekapselten Bezug/Zeiger kopiert.

+0

Das Kopieren von unveränderlichen Objekten ist nicht optimal - es verbraucht unnötig zusätzliche Ressourcen. Dies kann je nach Situation ein Problem verursachen oder nicht, aber das Kopieren unveränderlicher Objekte sollte generell verhindert werden. – Grundlefleck

4

Dies ist eine sprachabhängige Frage, insbesondere in Bezug auf die Lebensdauer. Für einen Moment vergessen wir das.

Kopierkonstruktoren sind insofern wertvoll, als sie es Ihnen ermöglichen, ein Objekt zu nehmen und eine vollständig unabhängige Kopie davon zu erstellen. Dies ist insofern wertvoll, als Sie das zweite Objekt unabhängig von dem ersten ändern können. Oder eine Komponente kann eine private Kopie erstellen, um sich vor anderen Komponenten zu schützen, die das Objekt unter sich verändern.

Unveränderbare Objekte sind unveränderbar. Es gibt keinen Wert beim Erstellen einer Kopie eines Objekts, das sich nicht ändert.

Jetzt lassen Sie wieder etwas über das Leben. In Sprachen wie C++ erlauben Kopierkonstruktoren auch das Arbeiten mit Speicher-/Lebensdauerproblemen. Zum Beispiel, wenn ich eine API schreibe, die eine SomeType* dauert und ich möchte sie länger als die Lebensdauer meiner Methode behalten. In C++ besteht die zuverlässigste Methode darin, eine Kopie des Objekts über einen Kopierkonstruktor zu erstellen.

1

es ist so natürlich, weil der Wert des unveränderlichen Objekts nicht geändert werden kann.

Verwandte Themen