Seite 1 von 1

Nicht nach NULL prüfen ?

Verfasst: 20. Januar 2009 14:19
von neueHier
Ich habe hier eine dumme Frage ...
In keinen Beispiel, die ich bis jetzt gesehen habe, wird nach einen new() auf NULL geprüft. Sogar der von uic generierte Kode macht new() und danach wird vor einem Zugriff nicht auf NULL geprüft.
Braucht man das nicht?

void setupUi(QDialog *amyDlg)
{
amyDlg->setObjectName(QString::fromUtf8("amyDlg"));
amyFrame = new QFrame(amyDlg);
amyFrame ->setObjectName(QString::fromUtf8("amyFrame "));
amyFrame ->setGeometry(QRect(0, 0, 417, 370));
....
}

Verfasst: 20. Januar 2009 14:24
von Volker
Wenn Du nicht gerade auf einem Handy arbeitest, welches knapp an Speicher ist, dann sollte es in der Regel unnötig sein. Wenn Du auf Nummer sicher gehen willst das genügend Speicher allokiert werden konnte, is es aber auch nicht verkehrt.

Verfasst: 20. Januar 2009 15:05
von RHBaum
new = c++
die c++ runtime wirft dir im Falle das sie den speicher ned allokieren kann, eine bad_alloc exception.

Fuer den normalen fall, also wenn nen new schiefgeht, dann geht soweiso nur noch rudimentaere schadensbegrenzung. zumindest geht die c++ runtime davon aus.
Wer denkt, das er nach nem bad_alloc durch ein "normales new" noch ne MessageBox hochbekommt, muss schon Berufsoptimist sein :-)

Also wird man das bad_alloc an zentraler stelle abfangen, dringenste dinge noch sichern wenn noetig und möglich, und die application eh mit nem abort() ueber den Jordan schicken ...

Implementierst du keine eigene fehlerbehandlung, wird dir per standard eh das abort() aufgerufen und du kommst aus dem new eh ned wieder raus ...

Ueberprufen des news macht nur sinn, wenn das programm trotz schiefgelaufen new ueberhaupt noch was machen kann ... und dafuer muesstest das bad_alloc sowieso umleiten ... also in ganz wenigen spzialfaellen intressant, wo man speichertechnich ganz genau weiss was man tut ... ansonsten ist das checken des news eigentlich nur wirklich unnoetiger overhaed (aber sehr sehr geringer Overhaed im vergleich zum new selber ^^ ).

Ciao ...

Verfasst: 20. Januar 2009 15:21
von neueHier
Wow, das war aber schnell. :o
Vielen Dank für beide Antworte!

Verfasst: 21. Januar 2009 07:13
von AuE
naja wobei wenn du dir einen ptr auf ein Objekt von dir selbst holst (am Besten noch via ner Fkt) macht es schon Sinn zu prüfen ob es geklappt hat. Sicher nicht immer aber es gibt dennoch Fälle in denen ein

if (ptr) Sinn macht