Rückgabe einer "NULL-Referenz" in C ++?

In dynamisch getippten Sprachen wie JavaScript oder PHP mache ich oft Funktionen wie:

<code>function getSomething(name) {
    if (content_[name]) return content_[name];
    return null; // doesn't exist
}
</code>

Ich gebe ein Objekt zurück, wenn es existiert odernull wenn nicht.

Was wäre das Äquivalent in C ++ unter Verwendung von Referenzen? Gibt es generell ein empfohlenes Muster? Ich habe gesehen, dass einige Frameworks eine habenisNull() Methode für diesen Zweck:

<code>SomeResource SomeClass::getSomething(std::string name) {
    if (content_.find(name) != content_.end()) return content_[name];
    SomeResource output; // Create a "null" resource
    return output;
}
</code>

Dann würde der Anrufer die Ressource folgendermaßen überprüfen:

<code>SomeResource r = obj.getSomething("something");
if (!r.isNull()) {
    // OK
} else {
    // NOT OK
}
</code>

Es scheint jedoch schwierig zu sein, diese Art von magischer Methode für jede Klasse zu implementieren. Es scheint auch nicht offensichtlich zu sein, wann der interne Zustand des Objekts von "null" auf "nicht null" gesetzt werden soll.

Gibt es eine Alternative zu diesem Muster? Ich weiß bereits, dass es mit Zeigern gemacht werden kann, aber ich frage mich, wie / ob es mit Referenzen gemacht werden kann. Oder sollte ich die Rückgabe von "Null" -Objekten in C ++ aufgeben und ein C ++ - spezifisches Muster verwenden? Jeder Vorschlag zur richtigen Vorgehensweise wäre willkommen.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage