V
[quote="HumeSikkins"]Ich find's gut, denn ein Nullpointer ist ein schöner Sentinel-Wert den ich recht häufig und gerne verwende. [quote]
das ist bedeutungsüberladung.
Das man sich explizite if-Abfragen beim Löschen von z.B. optionalen Aggregationen sparen kann macht Code imo einfacher und leichter zu verstehen (anderes Beispiel: Implementation von Move-Operationen).
ich frage gerne der deutlichkeit habler dennoch und überflüssigerweise mit if ab.
Was ich nicht mache und was ich in der Tat für schlecht halte ist die generelle Verwendung von Code wie diesem:
delete p;
p = 0;
Mit der Begründung "ich will mich vor Doppel-Deletes" schützen. Das führt dann häufig wirklich zur Verschleierung von Logikfehlern.
stimmt.
aber man baut sich dann ja eh ein void sicherLoesch(T*& t);
Aber letztlich ist das konkrete Verhalten von delete eh wurscht, solange es explizit und vollständig spezifiziert ist. Wie man hier sieht kann man es eh nie allen Recht machen.
naja, ich mag halt zero abstraction overhead. mag nicht sachen eingebaut haben, nur weil man es manchmal braucht.
viele zeiger sind bei mir attribute und sie zeigen sicher auf was (vom ctor sichergestellt).
es wäre kein problem, wenn delete minimal wäre, also bei delete 0; undefiniert wäre, sich einen smart-pointer zu bauen, der die semantik hat, daß man nen null-zeiger fehlerfrei löschen darf. damit könnte man es beiden seiten recht machen. aber so, wie es jetzt ist, bin ich nicht ganz zufrieden.