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

реализация std::move
Я получил следующий фрагмент из Майкрософт template <typename T> struct RemoveReference { typedef T type; }; template <typename T> struct RemoveReference<T&> { typedef T type; }; template <typename T>...
506 просмотров
schedule 07.12.2022

Семантика перемещения с членом std::vector
Извините, если об этом уже спрашивали, но, насколько я понимаю, в С++ 11 std::vector имеет конструктор перемещения, так что копии почти ничего не стоят в определенных ситуациях, например, возвращая единицу по значению. Однако, если у меня есть...
3469 просмотров
schedule 15.07.2022

Ошибка конструктора перемещения unordered_set/map в VC10?
Похоже, что конструкторы перемещения unordered_set/map в VC10 (Visual Studio 2010) переводят правую часть в неопределенное состояние после вызова, что приводит к сбою других операций (таких как «вставка»). Операторы присваивания перемещения работают...
641 просмотров

Код неожиданно не компилируется. Почему?
Взгляните на следующий пример кода, в котором используется класс uncopiable , аналогичный boost::noncopyable : #include <vector> class uncopiable { using self = uncopiable; protected: uncopiable() {} ~uncopiable() {}...
154 просмотров

Move Constructor vs Copy Elision. Какой из них вызывается?
У меня есть два фрагмента кода, чтобы показать вам. Это два класса, каждый из которых предоставляет конструктор перемещения и функцию, которая возвращает временное значение. В первом случае функция, возвращающая временное значение, вызывает...
3111 просмотров

Присвоение из rvalue разрешено, когда оператор присваивания явно удален?
Рассмотрим следующий код, который компилируется в Clang, GCC и VS 2015 ( онлайн-пример ): #include <utility> class S { public: S(int x) : i(x) { } ~S() { } S(S&&) = default; S(const S& ) = delete;...
139 просмотров

Почему конструктор перемещения требует конструктора по умолчанию для своих членов?
Я пытался реализовать конструктор перемещения для класса без конструктора копирования. Я получил ошибку, что конструктор по умолчанию для члена класса отсутствует. Вот тривиальный пример, иллюстрирующий это: struct A { public: A() =...
1825 просмотров

Каков порядок присваиваний внутри конструктора перемещения по умолчанию?
В настоящее время я работаю над собственным распределителем на С++. Этот распределитель должен регулярно дефрагментировать свою память, перемещая память и объекты. Эти сдвиги всегда нисходящие, а это означает, что адрес перемещаемого фрагмента...
144 просмотров

Copy ctor вызывается вместо move ctor
Почему при возврате из bar вызывается конструктор копирования вместо конструктора перемещения? #include <iostream> using namespace std; class Alpha { public: Alpha() { cout << "ctor" << endl; } Alpha(Alpha &) { cout...
224 просмотров

std::vector, похоже, предпочитает копировать, а не перемещать конструкцию при автоматическом изменении размера
Кажется, что когда std::vector изменяет свой размер (например, при вставке нового элемента и нехватке места), он использует конструктор копирования своих элементов, а не их конструктор перемещения, даже если они имеют оба. Это общее правило,...
389 просмотров

RVO и удаленный конструктор перемещения в C++14
Я узнал о (N) RVO в течение последних нескольких дней. Как я читал о cppreference в статье об исключении копии для С++ 14: ... компиляторам разрешено, но не требуется пропускать конструкцию копирования и перемещения (начиная с С++ 11) объектов...
639 просмотров
schedule 06.07.2023

Наследование конструкторов копирования и перемещения базового класса с использованием ключевого слова
Я хочу унаследовать конструктор копирования базового класса, используя ключевое слово using : #include <iostream> struct A { A() = default; A(const A &) { std::cerr << __PRETTY_FUNCTION__ << std::endl; } A(...
1746 просмотров

Как в C++ можно предсказать, будет ли вызываться семантика перемещения или копирования?
Учитывая широту, которую компилятор C++ имеет в создании экземпляров временных объектов и в вызове механизмов, таких как оптимизация возвращаемого значения и т. д., не всегда ясно, глядя на какой-либо код, будет ли вызываться семантика перемещения или...
65 просмотров

Как отключить создание/копирование объектов вне фабричного метода?
У меня есть класс с очень большой полезной нагрузкой, поэтому очень дорого создавать/копировать/перемещать экземпляр этого класса. Поскольку они не изменятся после завершения инициализации приложения, нет необходимости создавать временные объекты...
119 просмотров

определяемый компилятором конструктор перемещения с деструктором
Согласно ссылке cpp cpp-ref , компилятор не генерирует перемещение по умолчанию конструктор, если у нас есть определяемый пользователем деструктор. Фрагмент кода: class General { public: ~General(); General(); void...
50 просмотров
schedule 25.06.2022

Как я могу реализовать конструктор и оператор перемещения для unique_ptr как закрытый член класса
Я пытаюсь написать класс Matrix . Я использую unique_ptr в качестве массива указателей хранилища. Но этот unique_ptr является закрытым членом класса. Я хочу добавить конструктор перемещения в свой класс Matrix. Но мне нужна функция getter...
36 просмотров

Конструктор неявного перемещения должен быть по возможности без исключения.
В основном по стандарту: Конструктор-наследник (12.9) и неявно объявленная специальная функция-член (раздел 12) имеют спецификацию исключения . Если f является наследующим конструктором или неявно объявленным конструктором по умолчанию,...
49 просмотров
schedule 29.07.2023

Почему не вызывается конструктор перемещения переменной-члена?
Рассмотрим следующие классы. Если я реализую конструктор перемещения самостоятельно, как показано ниже, почему элемент панели b не перемещается, а копируется? Но если я использую конструктор перемещения по умолчанию, то b перемещается. Почему...
89 просмотров
schedule 18.08.2022

std::is_move_assignable_v false, хотя есть оператор присваивания перемещения
Контекст: у меня есть класс DLXMatrix с некоторым атрибутом, который является вектором некоторого локального класса с именем Header . Каждый Header содержит некоторый указатель на некоторые другие Header , которые ссылаются на элементы того...
84 просмотров

Почему конструкторы перемещения неявно удаляются для моего класса?
Следующий код... // main.cpp #include <grpcpp/grpcpp.h> class ClientContextContainer { public: ClientContextContainer( int i ) : i_(i) {} private: grpc::ClientContext client_context_; int i_; }; class ArrayContainer { public:...
195 просмотров