56 Stimmen

Nullptr und Prüfung, ob ein Zeiger auf ein gültiges Objekt zeigt

In einigen meiner älteren Code-Projekte, als ich noch nichts von intelligenten Zeigern gehört hatte, habe ich immer, wenn ich überprüfen musste, ob der Zeiger noch auf ein gültiges Objekt zeigt, etwas wie folgt gemacht...

object * meh = new object;
if(meh) 
    meh->member;

Oder wenn ich das Objekt sicher löschen wollte, etwa so

if(meh)
{
    delete meh;
    meh = 0;
}

Nun, jetzt habe ich auf die harte Tour gelernt, welche Probleme bei der Verwendung von Objekten und Zeigern in booleschen Ausdrücken mit buchstäblichen Zahlen auftreten können :. Und jetzt habe ich auch etwas über die nicht so neue, aber ziemlich coole Funktion von C++ gelernt, die nullptr Stichwort. Aber jetzt bin ich neugierig.

Ich bin bereits den Großteil meines Codes durchgegangen und habe ihn überarbeitet, so dass ich zum Beispiel beim Löschen von Objekten jetzt schreibe

if(meh)
{
    delete meh;
    meh = nullptr;
}

Jetzt frage ich mich, was es mit dem Booleschen auf sich hat. Wenn Sie nur sagen, eine int in eine if-Anweisung wie diese übergeben,

int meh;
if(meh)

Dann prüft es implizit auf Null, ohne dass Sie es schreiben müssen.

if(meh == 0) // does the exact same check

Wird C++ nun dasselbe für Zeiger tun? Wenn ein Zeichen * wie dieses an eine if-Anweisung übergeben wird?

char * meh;
if(meh)

Dann wird es implizit mit nullptr vergleichen? Da ich diese ifs schon so lange schreibe, ist es mir inzwischen zur zweiten Natur geworden, zu prüfen, ob die Zeiger gültig sind, bevor ich sie verwende, indem ich if (object *) eingebe und dann seine Mitglieder aufrufe. Wenn dies nicht die Funktionalität ist, warum nicht? Zu schwierig zu implementieren? Würde einige Probleme lösen, indem eine weitere kleine Möglichkeit beseitigt wird, wie man seinen Code verpfuschen könnte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X