Wenn ich eine Funktion habe, die einen Zeiger akzeptiert, der niemals NULL sein darf, mache ich normalerweise etwas wie das hier:
void Foo(const somePointer* ptr)
{
if (ptr == NULL)
{
// Assertion werfen
return;
}
// Etwas tun
}
Jetzt überprüfe ich also jedes Mal, ob der Zeiger NULL ist, und wenn er nicht von Anfang an auf NULL gesetzt und auch nicht allokiert ist, dann ist diese Überprüfung nutzlos. Jetzt überlege ich also, ob ich meine Funktionen so definieren sollte (obwohl mir klar ist, dass das nicht garantiert, dass ich ein gültiges Objekt erhalte, zumindest wird es nicht NULL sein):
void Foo(const somePointer& ptr)
{
// Keine Überprüfung mehr nötig, der Client ist verantwortlich
// Etwas tun
}
Bevor ich das also mache (oder auch nicht, abhängig von den Antworten, die ich hier bekomme), dachte ich, ich würde hier fragen und sehen, was alle dazu zu sagen haben, insbesondere die Vor- und Nachteile.