Скажем, у меня есть следующая функция:
const std::string& Cat::getKittenName() const
{
Kitten* kitty = getKitty();
return kitty->getName();
}
Где Kitten::getName возвращает const std::string&, как лучше всего обрабатывать случай, когда kitty является nullptr? Я мог бы вернуться std::string(""), но затем возвращаю ссылку на временное и практически гарантирующее поведение undefined. Я мог бы изменить функцию getKittenName, чтобы вернуть std::string, чтобы обойти это, но затем я представляю избыточную копию для всех случаев, когда kitty доступен. Сейчас я чувствую, что лучший вариант:
const std::string& Cat::getKittenName() const
{
Kitten* kitty = getKitty();
if (kitty)
{
return kitty->getName();
}
static std::string empty("");
return empty;
}
Единственная проблема может быть, если "волшебная статика" недоступна. Есть ли проблемы с этим решением или есть лучший способ сделать это?