Re: хитрый возврат объекта из функции
От: testpu  
Дата: 10.02.11 12:48
Оценка:
Здравствуйте, 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;
   }      
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.