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.