Russian Qt Forum
Ноябрь 15, 2024, 19:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как вернуть QMap из функции?  (Прочитано 4095 раз)
myr
Гость
« : Сентябрь 04, 2009, 16:12 »

Нужно создавать указатель на него?
В с массивы не возращают или он не массив?
Спасибо.
Записан
Rcus
Гость
« Ответ #1 : Сентябрь 04, 2009, 16:35 »

Это просто объект с семантикой значения, а потому может нормально возвращаться из функции по значению.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Сентябрь 04, 2009, 18:25 »

Здравствуйте
Нужно создавать указатель на него?
В с массивы не возращают или он не массив?
Тут у них хитро. Пример попроще

Код:
QString a("Test");
QString b = a;
Они держат 1 копию данных (в данном случае "Test") и счетчик объектов которые эти данные используют. Копирование сводится к увеличению этого счетчика. Когда вызовется деструктор "a" счетчик уменьшится на 1. Если Вы попытаетесь изменить "a" - для него будут созданы новые данные а счетчик на старые уменьшится. Когда счетчик обнулится вызывается delete для данных. Поэтому они интенсивно передают и возвращают объекты/контейнеры по значению. С непривычки такой подход "бьет по ушам"  Улыбающийся

Несмотря на все эту крутизну с "shallow copy" я бы лично наглеть не стал и по значению бы не возвращал. А написал бы скромно и надежно

Код:
typedef QMap<QString, int> TMap;

void FillMap( TMap & map )
{
  ....
}

...

TMap map;
FillMap(map);
Записан
Rcus
Гость
« Ответ #3 : Сентябрь 04, 2009, 18:44 »

Ну не совсем так. Оптимизация возвращаемого значения (RVO) - стандарт современных компиляторов: при совмещении определения и инициализации объекта возвращаемым значением копирование объекта не происходит /** \see enwi Return value optimization */
Записан
myr
Гость
« Ответ #4 : Сентябрь 07, 2009, 08:55 »

Спасибо.
Собираю я в МСВС, пойду по пути Igors.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.