Welche Probleme /Fehler können bei "new" Speicherreservierung entstehen?
-
1.Frage
Gibt es Fälle, dass das Erzeugen von Objekten via "new" Fehler auftreten? Als das das Objekt auf dem Speicher nich reserviert werdne kann oder andere Dinge?
wird dann der Pointer auf NULL gesetzt?
Was kann noch passieren?
2. Frage:
Wie kann ich den new Operator überladen das er mir automatisch was TRACED oder in ne File Loggt? geht das?
Grüße
-
BorisDieKlinge schrieb:
Gibt es Fälle, dass das Erzeugen von Objekten via "new" Fehler auftreten? Als das das Objekt auf dem Speicher nich reserviert werdne kann oder andere Dinge?
Ja, der Heap kann aus den Nähten platzen (vor allem wenn du etwas verschwenderisch mit deinem Speicher umgehst). Oder der Ctor des angelegten Objekts kann eine Exception werfen, um Initialisierungsfehler zu kennzeichnen.
wird dann der Pointer auf NULL gesetzt?
Bei Speicherproblemen wird typischerweise NULL geliefert, bei internen Problemen des Ctors kommt dir die Exception entgegengeworfen.
-
CStoll schrieb:
Bei Speicherproblemen wird typischerweise NULL geliefert, bei internen Problemen des Ctors kommt dir die Exception entgegengeworfen.
Oder, noch typischer,
std::bad_allocgeworfen.
BorisDieKlinge schrieb:
2. Frage:
-
bad_alloc sollte laut Standard geworfen werden. Der Null-Pointer ist dagegen ein Relikt aus alten Exception-losen-C++-Zeiten.
-
Artchi schrieb:
bad_alloc sollte laut Standard geworfen werden. Der Null-Pointer ist dagegen ein Relikt aus alten Exception-losen-C++-Zeiten.
Oder wenn man explizit new(nothrow) anfordert.
-
int *i = new int; // wirft evtl. bad_alloc int *a = new(nothrow) int; // gibt evtl. null zurückSo, jetzt haben wir es zusammen gefasst.
