Вопросы по теме 'move-semantics'

Почему нет присваивания / конструктора перемещения по умолчанию?
Я простой программист. Переменные-члены моего класса чаще всего состоят из POD-типов и STL-контейнеров. Из-за этого мне редко приходится писать операторы присваивания или конструкторы копирования, поскольку они реализованы по умолчанию. Добавьте...
42391 просмотров
schedule 15.06.2024

Делаем своп быстрее, проще в использовании и безопасным для исключений
Я не мог спать прошлой ночью и начал думать о std::swap . Вот знакомая версия C++98: template <typename T> void swap(T& a, T& b) { T c(a); a = b; b = c; } Если определяемый пользователем класс Foo использует...
2421 просмотров
schedule 17.04.2024

Как компилятор узнает, что нужно перемещать локальные переменные?
Мне любопытно, как именно работает эта функция. Рассмотрим что-то вроде std::unique_ptr<int> f() { std::unique_ptr<int> lval(nullptr); return lval; } Этот код прекрасно компилируется даже для типа, предназначенного только для...
1397 просмотров
schedule 09.02.2024

Конструктор перемещения С++ 11 не вызывается, предпочтителен конструктор по умолчанию
Предположим, у нас есть этот класс: class X { public: explicit X (char* c) { cout<<"ctor"<<endl; init(c); }; X (X& lv) { cout<<"copy"<<endl; init(lv.c_); }; X (X&& rv) {...
7286 просмотров
schedule 30.12.2023

Перемещение семантики и передачи по Rvalue-ссылке в перегруженной арифметике
Я кодирую небольшую библиотеку числового анализа на C ++. Я пытался реализовать с использованием последних функций C ++ 11, включая семантику перемещения. Я понимаю обсуждение и главный ответ в следующем сообщении: С ++ 11 rvalues ​​и семантика...
2215 просмотров

Переместить семантику и скопировать конструктор
Я написал программу, как показано ниже: #include <iostream> using namespace std; class A { public: A() { } A(A &a) { id = a.id; cout << "copy constructor" << endl; } A& operator=(A...
238 просмотров

Скотт Мейерс о Rvalueness
Я посмотрел чрезвычайно информативное видео Скотта Мейерса о Универсальные ссылки , из которых я узнал большую часть своих знаний о ссылках Rvalue, перемещении и пересылке. В какой-то момент он говорил о значении , а не о типе переменной, и...
1221 просмотров

Освобождение памяти с помощью std::move()?
Говорит, что у меня есть класс со стандартным контейнером: class Library{ std::vector<Book> books; public: void putOnFire(){ books.clear(); } }; Обычный способ очистки контейнера — «очистить», однако большая часть...
182 просмотров
schedule 05.05.2024

признак типа c++, чтобы сказать тривиально подвижный - примеры
Я бы определил "тривиально подвижный" как Вызов конструктора перемещения (или оператора присваивания перемещения) эквивалентен memcpy байтов в новое место назначения без вызова деструктора для перемещенного объекта. Например, если вы...
1144 просмотров
schedule 17.04.2024

Добавление/удаление элементов из вектора при повторении указанного вектора
У меня есть вектор v , который я хочу повторить, выполняя функцию для каждого элемента, который изменяет элемент (можно сделать с помощью map() ) после этого, возможно, удаляет текущий элемент, в зависимости от того, что было результатом...
508 просмотров
schedule 11.04.2024

Неоднозначность присваивания копирования в C++ при назначении перемещения
В C++11 мы получаем ошибку неоднозначности от компилятора (g++), если делаем следующие определения: C& operator=(C rhs) { swap(*this, rhs); return *this; } C& operator=(C&& rhs) { swap(*this, rhs); return *this; }...
255 просмотров
schedule 12.10.2022

Замена std::function изнутри себя (перемещением присваивания *this?)
Можно ли заменить один std::function внутри себя другим std::function ? Следующий код не компилируется: #include <iostream> #include <functional> int main() { std::function<void()> func = []() { std::cout...
139 просмотров

Почему я не могу вызвать назначение перемещения из ctor перемещения?
Иногда это выглядит как экономия времени, если я могу вызвать операцию назначения перемещения из механизма перемещения. Но когда я пытаюсь, это приводит меня прямо к обычному назначению: #include <iostream> using namespace std; class...
29 просмотров
schedule 16.07.2022

Передача rvalue в ссылку const ведет себя странно при переходе по более длинному маршруту
У меня есть код, в котором один класс (класс B) хранит другой класс (класс A) по ссылке const lvalue. Я сделал это, чтобы избежать копирования экземпляра класса A, если я правильно понял, то даже при инициализации с помощью rvalue ссылка const может...
21 просмотров
schedule 17.02.2024