Konstruktor NULL zurückgeben Lassen
-
Ist es möglich, wenn irgendein Code im Konstruktor nicht geklappt hat, dass er 0 zurückgibt
Beispiel:Klasse *bla = new Klasse() if(bla==NULL) { //Error }
-
Nein, ein Konstruktor kann nichts zurückgeben. Du kannst eine Exception werfen.
-
Wenn ein Konstruktor ein Objekt erfolgreich instanziieren konnte wird an einer Adresse Speicher angelegt. Die Adresse bekommst Du zurück. Deshalb ist jeder Konstruktor <= 0 ungültig. Ein Konstruktor gibt somit immer entweder eine gültiger Seicheradresse zurück oder er konnte keinen Speicher anlegen. Ob er imletzteren Fall Null, -1 zurückgibt, oder eine Exception wirft, weiß ich nicht.
Ok ok ich gehe mich schon in die Ecke stellen.

Jedenfalls solltest Du den Fall vorsehen, daß der Konstruktor keinen Speicher reservieren konnte.
Grüße, M. Incani
-
man kann doch versuchen den erfordeerlichen rohspeicherplatz zu reservieren.. wenn das klapp darin das objekt anlegen.. weis aber nich mehr wie das geht;)
-
BorisDieKlinge schrieb:
man kann doch versuchen den erfordeerlichen rohspeicherplatz zu reservieren.. wenn das klapp darin das objekt anlegen.. weis aber nich mehr wie das geht;)
Und das bringt Dir was genau?
Den Fehler, wenn kein Speicher verfügbar ist, musst Du immer abfangen, egal ob beim Rohspeicher allokieren oder beim Objekte konstruieren. Und wenn Du 0 als Rückgabe von new haben willst, nimmst Du new (nothrow), welches es (oh Wunder) sowohl für Rohspeicher als auch für Objekte gibt.
Ich glaube auch eher es kommt dem OP darauf an, einen Fehler innerhalb des Konstruktors anzuzeigen. Und dafür kann man wie gesagt Exceptions nutzen. Da ist auch garantiert dass nichts allokiert wurde wenn die Exception abgefangen wird.
@BlackPepper:
Ein Konstruktor gibt niemals etwas zurück. Das ist der Operator bzw. der Ausdruck new Objekt
-
Der Konstruktor selbst reserviert keinen Speicher, das macht new.
-
Wie schon angedeutet gibt es kein Rückgabewert von Konstruktoren. Bei new ist das Verhalten zumindest bei VC++ 2005 (und ich glaube auch nach dem C++98 Standard) wie folgt:
Bei einem Fehlschlag wird std::bad_alloc als Exception ausgelöst.
Sofern Exceptions deaktivert sind (was aber IMHO kein Standard ist), sowie auf Pre-Standard Compilern, liefert new statt dessen einen 0-Zeiger.
cu André