Описание тега move-semantics
Move semantics is a programming language feature that allows a copy operation to be replaced by a more efficient "move" when the source object is a temporary or an otherwise expiring object.
3
ответа
Почему этот boost::asio::tcp::socket можно использовать повторно?
Ниже приведен код из примера boost::asio. Почему это нормально, чтобы переместить socket_ член при построении chat_session если рекурсивный вызов в нижней части обработчика собирается передать это же tcp::socket в следующий раз, когда произойдет сог…
31 июл '18 в 16:13
1
ответ
Cppcheck знает о семантике перемещения?
Я пишу класс, который более или менее выглядит так struct Foo { std::shared_ptr<Bar> bar_ptr; Foo(std::shared_ptr<Bar> b) : bar_ptr(std::move(b)) {} }; и cppcheck предупреждает (производительность) Параметр функции 'b' должен быть переда…
06 фев '18 в 01:26
1
ответ
Правильно ли я использую семантику перемещения? Какая будет выгода?
Интересно, если я использую move семантически правильно: class Vertex{ protected: Common::Point3D position; Common::Point3D normal; Common::Point2D uv; Common::Point2D tangent; public: Vertex(Common::Point3D &&position, Common::Point3D &…
18 май '15 в 21:41
3
ответа
Почему конструктор перемещения / оператор присваивания в C++11 не работает должным образом?
#include <iostream> using namespace std; struct A { A() { cout << "A()" << endl; } ~A() { cout << "~A()" << endl; } A(A&&) { cout << "A(A&&)" << endl; } A& operator =(A&&) { cout …
28 сен '12 в 21:11
1
ответ
В чем преимущество использования конструктора перемещения по сравнению с передачей указателя?
Foo(Foo&& other) { this->bar = other.bar; other.bar = nullptr; } Foo(Foo* other) { this->bar = other->bar; other->bar = nullptr; } Вышеупомянутые два, кажется, делают то же самое. Так почему рекомендуется использовать конструктор…
28 янв '17 в 01:42
3
ответа
Назначение перемещения несовместимо со стандартным копированием и обменом
Тестирование новой семантики Move. Я только что спросил о проблемах, которые у меня были с конструктором Move. Но, как выясняется в комментариях, проблема в том, что оператор "Назначение перемещения" и оператор "Стандартное назначение" конфликтуют п…
07 ноя '13 в 16:41
1
ответ
Почему в сопоставлении с образцом кортежа Rust требуется явное заимствование?
Я пишу бинарное дерево на Rust, и проверка заимствований действительно смущает меня. Вот минимальный пример, который воспроизводит проблему. Двоичное дерево определяется следующим образом: struct NonEmptyNode; pub struct BinaryTree { root: Option<…
10 май '18 в 03:42
3
ответа
Все ли реализации std::move(), основанные на std::swap(), содержат ошибки?
Возможный дубликат: Что я могу сделать с перемещенным объектом? Например, посмотрите этот код: template<class T> void swap(T& a, T& b) { T tmp(std::move(a)); a = std::move(b); b = std::move(tmp); } Это только у меня, или здесь есть оши…
27 июл '12 в 16:01
5
ответов
Является ли конструкция "передача по значению и перемещению" плохой идиомой?
Так как у нас есть семантика перемещения в C++, в настоящее время это обычно делается void set_a(A a) { _a = std::move(a); } Причина в том, что если a является значением, копия будет удалена, и будет только один ход. Но что произойдет, если a такое …
10 янв '14 в 02:56
3
ответа
Конструктор перемещения: как обрабатывать атрибут контейнера?
Как правильно инициализировать атрибут контейнера, избегая реконструкции содержащихся объектов? class BAR { ... }; class FOO { public: FOO(FOO &&f) { // ???? } std::vector<BAR> b; };
20 май '13 в 12:11
0
ответов
push_back PR-значение в векторе
Внимательно читая ссылки, конструктор перемещения может быть вызван только Xvalue. Тогда как-то так... std::vector<Class> vec vec.push_back(Class(..args..)) возможно без перемещения (приведения) к Xvalue? Есть ли конкретный способ использовани…
22 окт '16 в 16:09
1
ответ
Почему std::weak_ptr не имеет конструктора перемещения или оператора присваивания перемещения?
Просматривая 1,53 заголовка boost для weak_ptr, я был удивлен, увидев, что назначение перемещения и конструкторы перемещения были реализованы, даже если они не были задокументированы. Из этой документации нет никаких требований к std::weak_ptr для о…
16 апр '13 в 03:58
1
ответ
Компилятор не использует Move C'or / назначение операции?
Простой вопрос на самом деле. Что происходит в следующем примере кода, который приводит к тому, что он не компилируется? Ошибка возникает в первой строке main(): "Использование удаленной функции"std::__atomic0::...__atomic_base(...)")" #include <…
19 мар '15 в 17:59
1
ответ
Почему конструктор копирования вызывается, когда я возвращаю выделенный объект кучи, но не для выделенного объекта стека?
У меня есть state класс, который имеет задание на перемещение / конструктор. Копирование / конструктор установлены на delete, Я запутался, почему в следующей функции (которая возвращает state object) компилируется и работает так: state propagator::P…
07 ноя '18 в 09:35
2
ответа
std::move или std::forward при назначении универсального конструктора переменной-члену в C++
Рассмотрим следующие классы foo1 а также foo2 template <typename T> struct foo1 { T t_; foo1(T&& t) : t_{ std::move(t) } { } }; template <typename T> struct foo2 { foo1<T> t_; foo2(T&& t) : t_{ std::forward<T>…
02 дек '16 в 14:53
1
ответ
C++ использование удаленной функции с unique_ptr, make_unique
Псевдокласс, выполняющий матричное дополнение, использующее std::unique_ptr в качестве члена данных для представления элементов. М-рядов, N столбцов. Класс настроен для типа M, N. Я пытаюсь выполнить сложение матрицы (C = A+B) и продолжаю получать э…
11 авг '18 в 20:58
1
ответ
C++ std::deque copy конструктор проблема
#include <deque> #include <vector> struct A { A(int* const p) : m_P(p) {} A(A&& rhs) : m_P(rhs.m_P) { rhs.m_P = nullptr; } A& operator=(A&& rhs) { delete m_P; m_P = rhs.m_P; rhs.m_P = nullptr; } ~A() { delete m_P; } A…
12 авг '16 в 07:30
1
ответ
Как преобразовать lvalue в rvalue? А что происходит с новым значением?
Я хотел бы переместить объект в std::vector с помощью std::vector::push_back(), Казалось бы, это возможно, так как есть std::vector::push_back(value_type&& val) функция. Но из-за существования std::vector::push_back(value_type const & va…
19 май '13 в 17:35
1
ответ
Делаем POD классы подвижными
У меня есть класс POD, и я хочу сделать его подвижным для эффективности. Я храню все данные в std::array объект-член, и я делаю мои публичные переменные-члены ссылки на части этого std::array объект. Сделав это, теперь я могу переместить все данные,…
22 дек '15 в 09:53
1
ответ
Оператор копирования, определенный в шаблоне, удаляемом компилятором
Я знаком с принципом (например, из этого и этого ответа), что когда класс имеет конструктор перемещения и / или оператор присваивания перемещения, его конструктор копирования по умолчанию и оператор назначения копирования удаляются. Тем не менее, в …
11 авг '14 в 15:10