Re: const reference in/out warning
От: Alexander G Украина  
Дата: 10.12.13 09:50
Оценка: 13 (3)
Здравствуйте, Dair, Вы писали:

D>Есть функция типа такой:


D>
D>const ValueObject& MyClass::getSavedObject(const KeyObject& id, const ValueObject& defaultValue) const
D>{
D>    std::map<KeyObject, ValueObject>::const_iterator it = storedObjects.find(id);
D>    if (it != storedObjects.end())
D>    {
D>        return it->second;
D>    }
D>    return defaultValue;
D>}
D>


D>Компилятор выдаёт warning в финальном return: "Returning reference to local temporary object".

D>Я понимаю, что имеется в виду, но я же нигде не ухудшаю область видимости — какой объект передали, тот и возвращаем.

Вообще, это небезопасно.

const ValueObject& v = myClass.getSavedObject(KeyObject(...), ValueObject(...)); // допустим, вернула дефолт
v.SomeMethod(); // и это уже нельзя
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.