Gerade Zusammenfassend sind die drei Möglichkeiten, den expliziten Konstruktor sind über
A Instanz (2) zu spezifizieren; // tut A instance = 2; jemals arbeiten?
A * Instanz = neu A (2); // nie sicher über & versus * hier, ich selbst
neu (& Instanz) A (2);
und Aromen von denen. Die
Idee
Ziel ist es, zu arrangieren, dass zu keinem Zeitpunkt ein Objekt erstellt wird, das nicht in einem richtigen initialisierten Zustand ist, und Konstruktoren sollen das sicherstellen. (Das bedeutet, dass Methoden nicht prüfen müssen, ob eine .init (...) Methode erfolgreich aufgerufen wurde oder nicht.)
Dies scheint mir der funktionalere Weg, um dies zu tun, vor allem für Klassen, die Teile von Frameworks sind und in Bibliotheken wiederverwendet werden. Wenn Sie daran interessiert sind, arbeiten Sie daran, dass alle Konstruktoren, einschließlich der Standardkonstruktoren, eine voll funktionsfähige Instanz bereitstellen.
Ausnahmefälle: Es gibt Dinge, die Sie möglicherweise nicht in der Konstruktoroperation haben, wenn es möglich ist, dass sie fehlschlagen, es sei denn, es ist angemessen, eine Ausnahme vom Konstruktor zu werfen. Und manche Leute haben gerne "leere" Instanzen, die mit nachfolgenden Methoden propagiert werden und sogar Initialisierungs-Mitglieder. Es ist interessant, Möglichkeiten zu finden, um solche Situationen zu mildern, und robuste Instanzen zu haben, die keine schlechten Zustände haben, gegen die bei Methodenimplementierungen und bei der Verwendung geschützt werden muss.
PS: In einigen komplexen Fällen kann es nützlich sein, eine initialisierte Instanz (Referenz) als Ergebnis einer Funktion oder einer Methode in einer "Factory" -Klasse zu liefern, so dass das Intermediate, Under-Setup Instanz wird nie außerhalb der Kapselung der Factory-Klasseninstanz oder -funktion gesehen. Das gibt uns
+4. Eine * Instanz = MakeAnA (2);
+5. Eine * Instanz = InterestingClass.A (2);
@Michael: was hat es damit zu tun? Es ist ein Low-Level-Sache ... und ein neues Objekt wird sowieso erstellt werden, nur über das alte, bin ich falsch? – badbadboy
Hoffe, meine Bearbeitung macht es klarer. –
Ich habe diese Antwort +1 gegeben - aber ich stimme nicht mit dem Punkt über die Verwendung in dem speziellen Fall der Vorbelegung von Speicher überein. In diesem Fall ist das 'Instanz' -Objekt * * der vorbelegte Speicher. –