Zwracanie „NULL reference” w C ++?

W językach z dynamicznym typowaniem, takich jak JavaScript lub PHP, często wykonuję takie funkcje, jak:

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

Zwracam obiekt, jeśli istnieje lubnull Jeśli nie.

Jaki byłby odpowiednik w C ++ za pomocą referencji? Czy jest ogólnie jakiś zalecany wzór? Widziałem pewne ramy mająceisNull() metoda do tego celu:

<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>

Następnie rozmówca sprawdziłby zasób w ten sposób:

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

Jednak implementacja tego rodzaju magicznej metody dla każdej klasy wydaje się ciężka. Również nie wydaje się oczywiste, kiedy wewnętrzny stan obiektu powinien być ustawiony z „null” na „not null”.

Czy jest jakaś alternatywa dla tego wzoru? Wiem już, że można to zrobić za pomocą wskaźników, ale zastanawiam się, jak / jeśli można to zrobić za pomocą odniesień. Czy powinienem zrezygnować z zwracania obiektów „null” w C ++ i używać jakiegoś wzorca specyficznego dla C ++? Wszelkie sugestie dotyczące właściwego sposobu postępowania byłyby mile widziane.

questionAnswers(7)

yourAnswerToTheQuestion