Форум программистов, компьютерный форум, киберфорум
Наши страницы

Move Semantic - будет ли утечка? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Из массива вещественных чисел удалить все отрицательные элементы http://www.cyberforum.ru/cpp-beginners/thread1131773.html
Помогите пожалуйста , очень срочно и если можно то попроще , что бы мог разобраться и прокомментировать Из массива вещественных чисел удалить все отрицательные элементы. Найти среднее...
C++ Определить номер минимального простого числа до и после упорядочивания массива(исправить ошибки в коде) Упорядочить массив целых положительных чисел по возрастанию, определить номер минимального простого числа до и после упорядочивания массива. Создать функции для сортировки массива и определения... http://www.cyberforum.ru/cpp-beginners/thread1131752.html
C++ Найти площадь многоугольника, заданного перечислением координат вершин в порядке обхода его границы
Найти площадь многоугольника, заданного перечислением координат вершин в порядке обхода его границы.(используя указатели)
C++ В заданном множестве точек плоскости найти количество точек, находящихся внутри кольца
В заданном множестве точек плоскости найти количество точек, находящихся внутри кольца, ограниченного окружностями с общим центром, радиусы которых r и R (r<R) Добавлено через 6 минут с помощью...
C++ Запуск VS с заданным INCLUDE http://www.cyberforum.ru/cpp-beginners/thread1131736.html
Нужно запустить VisualStudio c заданными переменными окружения MY_LIB MY_INCLUDE, значение которых определяется параметрами командной строки. Как это сделать - представления не имею :(
C++ Найдите треугольник максимальной площади.(через указатели) Исправьте ошибку. N треугольников плоскости заданы длинами своих сторон. Найдите треугольник максимальной площади.(через указатели) #include <iostream> #include <math.h> using namespace std; int... подробнее

Показать сообщение отдельно
gromo
371 / 270 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
28.03.2014, 12:00  [ТС]
Цитата Сообщение от DiffEreD Посмотреть сообщение
Или тут что то другое надо?
Надо только избежать ненужного копирования

В таком случае можно предоставить одну функцию с universal reference в качестве параметра, например, в моем случае так:
C++
1
2
3
4
5
6
7
8
9
10
class ChannelsScaleDraw
   {
   public:
       template <typename T> updateLabelsBuffer(T&& labels)
             {
                    l = std::move(labels);
             }
   private:
       std::vector<QString> l;
   };
И теперь если мы передадим rvalue либо lvalue в updateLabelsBuf(), то в любом случае лишнего копирования не будет?

Добавлено через 3 минуты
а насчет этого
Цитата Сообщение от DrOffset Посмотреть сообщение
Move assignment operator. Replaces the contents with those of other using move semantics (i.e. the data in other is moved from other into this container). other is in a valid but unspecified state afterwards. If std::allocator_traits<allocator_type>:: propagate_on_container_move_assignment() is true, the target allocator is replaced by a copy of the source allocator. If it is false and the source and the taget allocators do not compare equal, the target cannot take ownership of the source memory and must move-assign each element individually, allocating additional memory using its own allocator as needed.
Я так понял если аллокаторы двух контейнеров будут совместимыми, что определяется на этапе компиляции, то аллокаторы перемещаемого и получающего контейнеров обменяются? Написано, что аллокатор будет 'replaced' но как тогда уничтожится тот контейнер, в который перемещают (l в данном случае) другой контейнер (labels в данном случае)?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru