Manchmal müssen Sie einen Konstruktor schreiben, der fehlschlagen kann. Angenommen, ich möchte ein Objekt mit einem Dateipfad instanziieren
obj = new Object("/home/user/foo_file")
Solange der Pfad auf eine entsprechende Datei verweist, ist alles in Ordnung. Aber wenn die Zeichenfolge kein gültiger Pfad ist, sollten die Dinge kaputt gehen. Aber wie?
Du könntest:
- eine Ausnahme auslösen
- Rückgabe des Nullobjekts (wenn Ihre Programmiersprache es Konstruktoren erlaubt, Werte zurückzugeben)
- ein gültiges Objekt zurückgeben, aber mit einem Flag, das angibt, dass sein Pfad nicht richtig gesetzt wurde (ugh)
- Andere?
Ich gehe davon aus, dass die "Best Practices" verschiedener Programmiersprachen dies unterschiedlich implementieren würden. Zum Beispiel denke ich, dass ObjC (2) bevorzugt. Es wäre jedoch unmöglich, (2) in C ++ zu implementieren, wo Konstruktoren void als Rückgabetyp haben müssen. In diesem Fall gehe ich davon aus, dass (1) verwendet wird.
Können Sie in der Programmiersprache Ihrer Wahl zeigen, wie Sie mit diesem Problem umgehen würden, und erklären, warum?
void
- sie geben ein Objekt zurück.
new
ruft operator new
auf, um den Speicher zuzuweisen, und dann den Konstruktor, um ihn zu füllen. Der Konstruktor gibt nichts zurück und new
gibt den Zeiger zurück, von dem er erhalten hat operator new
. Ob "nichts zurückgibt void
" impliziert, dass "zurückgibt ", ist jedoch zu gewinnen.