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?
Antwort
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.
+1 Es hat keinen Sinn, zwei Instanzen von gleichen unveränderlichen Objekten zu haben - benutze einfach überall dieselbe Instanz. – Grundlefleck
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.
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
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.
es ist so natürlich, weil der Wert des unveränderlichen Objekts nicht geändert werden kann.
- 1. Optimiert Java unveränderbare Objekte?
- 2. Repository und unveränderbare Objekte?
- 3. Können Objekte mit privaten Kopierkonstruktoren geworfen werden?
- 4. C++: Automatische Vektorreallokation ruft Kopierkonstruktoren auf? Warum?
- 5. Ist/catch für AVAudioPlayer unnötig?
- 6. Warum sind diese beiden Objekte null?
- 7. PHP schließendes Tag unnötig?
- 8. Unnötig lange Regex
- 9. Effiziente, unveränderbare, erweiterbare Sammlungen für. NET
- 10. Unveränderbare Klasse in Eiffel
- 11. Unveränderbare Klasse Design
- 12. mqtt paho Netzwerkschleife unnötig?
- 13. Sind Erweiterungsmethoden für COM-Objekte fehlerhaft?
- 14. So verwenden Sie Kopierkonstruktoren richtig
- 15. C++ - Vektor-Arrays in Kopierkonstruktoren
- 16. Warum wird G1 Full GC scheinbar unnötig ausgelöst?
- 17. Warum sind Mongoose-Dokumente standardmäßig keine einfachen JavaScript-Objekte?
- 18. Warum eine unveränderbare Liste als verkettete Liste implementieren?
- 19. Sind DOM-Elemente Objekte?
- 20. Sind Lambda-Wert-Objekte?
- 21. Sind Java-Klassen Objekte?
- 22. JSP implizite Objekte sind Singleton-Objekte?
- 23. Warum sind unveränderliche Objekte in Double-Checked Locking sicher?
- 24. Python: Implementierung von seichten und tiefen Kopierkonstruktoren
- 25. Was sind Vertex Array Objekte?
- 26. Warum sind einige Objekte nicht von verschiedenen Threads aus zugänglich?
- 27. In JavaScript, warum sind keine Objekte gleich, außer Strings?
- 28. Warum Dict-Objekte in Python nicht hashbar sind?
- 29. In Java, warum sind Arrays Objekte? Gibt es bestimmte Gründe?
- 30. Wie viele Objekte sind für die Garbage Collection geeignet?
Warum Clone-Methode verwendet? – Jothi
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) –