Здравствуйте, l33thaxor, Вы писали:
L>Вот такое дело. Допустим у класса storage есть функция fetch_data, которая возвращает объекты типа data по запросу:
L>L>data storage::fetch_data(string const & request);
L>
L>Пока что data возвращается по значению. Но в большинстве случаев оказывается, что можно было бы возвратить и ссылку на data, сохраненный в storage:
L>L>data const & storage::fetch_data(string const & request);
L>
L>И это было бы гораздо эффективнее текущей версии, так как не надо делать копию data.
L>Но иногда storage не может найти данные по запросу, и он их создаёт. И в этом случае по ссылке возвратить data уже нельзя. Именно поэтому текущая версия fetch_data возвращает по значению. Вопрос: как так возвратить data, чтобы в в большинстве случаев не делать копирования, а делать только в тех редких случаях, когда приходится?
Как такой вариант?
data const & storage::fetch_data(string const & request, data& outForDataThatWasn'tFound, bool& dataFound )
{
...
if(found)
{
dataFound = true;
return dataThatWasFound;
}
else
{
outForDataThatWasn'tFound = newdata;
dataFound = false;
return outForDataThatWasn'tFound;
}
}