Frage zu new und delete
-
Hi.
Ist einer dieser Codes "falsch"?
Es geht mir nur um die Position des deleteIch schreib das mal so mal so und würde jetzt gern mal wissen ob das falsch ist.

Lala *x = new Lala(); if (x) { //mach was delete x; }Lala *x = new Lala(); if (x) { //mach was } delete x;
-
Hallo
Letztendlich machen beide Codes genau dasselbe.
Denn new liefert keinen NULL-Zeiger beim Mißlingen von Speicherreservierung, sondern wirft eine Exception. In dem Fall wird auch in beiden Codes das delete (so wie es hier steht) nicht erreicht und ist auch nicht nötig.
Desweiteren ist ein delete auf einen NULL-Zeiger gültig und hat keine Auswirkung.Wenn du ganz sicher gehen willst mach das hier
#include <memory> ... std::auto_ptr<Lala> x(new Lala()); //mach wasAllerdings hat auto_ptr auch seine Nachteile : Es ist nicht kopierbar. Das macht im gezeigten Beispiel aber keine Probleme.
bis bald
akari
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn du nicht willst das der new-Operator eine Exception wirft und dir einen Null-Pointer im Fehlerfall liefert kannst du eine andere Variante verwenden:
Lala* x = new ( std::nothrow ) Lala(); if ( !x ) // jetzt kommt das Programm bis hierhin wenn der Speicher nicht reserviert werden konnte { // mach irgendwas }
-
akari schrieb:
Allerdings hat auto_ptr auch seine Nachteile : Es ist nicht kopierbar. Das macht im gezeigten Beispiel aber keine Probleme.
Gemeinerweise ist er ja kopierbar. Die Operation tut nur nicht was man evtl. erwarten könnte (Besitzabgabe). Wenn man auf Nummer sicher gehen will, kann man stattdessen aber std::tr1::scoped_ptr nehmen.