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

Как на синтезированный конструктор перемещения C ++ влияют изменчивые и виртуальные члены?
Взгляните на следующий код: struct node { node(); //node(const node&); //#1 //node(node&&); //#2 virtual //#3 ~node (); node* volatile //#4 next; }; int main() { node...
1059 просмотров
schedule 15.11.2021

Почему перемещение производного класса возможно, а базовый класс - нет?
Рассмотрим следующий пример: #include <iostream> #include <string> #include <utility> template <typename Base> struct Foo : public Base { using Base::Base; }; struct Bar { Bar(const Bar&) { }...
2312 просмотров

Имеет ли смысл конструктор перемещения constexpr?
Имеет ли смысл иметь constexpr конструктор перемещения? Например, рассмотрим следующее: #include <array> class C { public: constexpr C(std::array<int, 3> ar) : m_ar{ar} {} constexpr C(C&& other) :...
1220 просмотров
schedule 22.09.2021

Почему я использую удаленную функцию 'void std :: ref (const _Tp &&) [with _Tp = int]'
#include<iostream> #include<utility> #include<tuple> #include<functional> using namespace std; int main() { int i = 0; auto p = make_pair(ref(i), ref(i++)); p.first++; p.second++; cout << "i = "...
2415 просмотров

Что такое правило выбора конструктора копирования/перемещения в С++? Когда происходит переход на резервное копирование?
Первый пример: #include <iostream> #include <memory> using namespace std; struct A { unique_ptr<int> ref; A(const A&) = delete; A(A&&) = default; A(const int i) : ref(new int(i)) { } ~A() =...
1209 просмотров

Передача/перемещение параметров конструктора в C++0x
Если у меня есть конструктор с n параметрами, так что любой аргумент может быть rvalue и lvalue. Можно ли поддерживать это с помощью семантики перемещения для rvalue без написания 2^n конструкторов для каждой возможной комбинации rvalue/lvalue?
5490 просмотров

Почему этот конструктор перемещения такой жадный?
У меня есть следующий код: #include <iostream> class foo_class { std::string value; public: foo_class(const foo_class& v) : value{v.value} { std::cout << "copy constructor" << std::endl; }...
150 просмотров

Скопировать или переместить конструктор для класса с членом std::mutex (или другим некопируемым объектом)?
class A { private: class B { private: std::mutex mu; A* parent = NULL; public: B(A* const parent_ptr): parent(parent_ptr) {} B(const A::B & b_copy) { /* I thought I needed code here */ } };...
1662 просмотров

Переместить конструктор (ссылка на rvalue) в неявном преобразовании
Я обновляю проект C++ с MSVC 2008 до 2010, и из-за нового конструктора перемещения CComBSTR [CComBSTR( CComBSTR&& )] я получаю ошибку компилятора из-за неоднозначного вызова. По сути, у нас есть класс String, очень похожий на std::wstring, который...
675 просмотров
schedule 24.07.2023

Move Constructor, вызывающий базовый класс Move Constructor
У меня есть базовый класс, который в основном завершает присоединение класса к произвольному дескриптору Windows (например, HWND, HFONT) и использует класс политики для присоединения/отсоединения и уничтожения: // class SmartHandle...
7269 просмотров
schedule 24.10.2022

Конструктор перемещения не работает неявно для переменных-членов?
Почему это: (vs2010) не перемещает вектор внутри класса? #include <vector> class MoveTest { public: std::vector<int> m_things; }; int _tmain(int argc, _TCHAR* argv[]) { MoveTest m; m.m_things.push_back(12); MoveTest...
1289 просмотров
schedule 25.12.2022

Явный конструктор перемещения?
Ключевое слово explicit рекомендуется для всех большинства конструкторов, которые могут вызываться с одним аргументом , за исключением конструкторов копирования. Для конструкторов копирования он используется (запрещает неявное копирование...
5301 просмотров

Создаются ли конструкторы перемещения автоматически?
У меня есть большой класс, содержащий множество контейнеров STL. Будет ли компилятор автоматически создавать конструктор перемещения, который будет перемещать эти контейнеры в цель, или мне придется создать свой собственный?
10691 просмотров
schedule 15.05.2023

Как написать конструктор перемещения и оператор присваивания для класса, который имеет частный объект в качестве свойства?
Сегодня я изучил конструкторы перемещения . Я прочитал этот ответ и попытался применить в нем пример конструктора перемещения к моему коду. class UnicodeString { public: enum ENDIANNESS_TYPE {LITTLE_ENDIAN = 0, BIG_ENDIAN = 1}...
262 просмотров

Реализация конструктора перемещения путем вызова оператора присваивания перемещения
В статье MSDN Как написать конструктор перемещения содержится следующее рекомендация. Если вы предоставляете для своего класса и конструктор перемещения, и оператор присваивания перемещения, вы можете устранить избыточный код, написав...
10832 просмотров

Как определяется конструктор перемещения по умолчанию для класса с элементами STL?
Я немного искал это, но не смог найти аналогичный пример, поэтому я хотел спросить, чтобы быть уверенным. Если у меня есть класс без явного выделения кучи, а только классы STL, например: class Klass { .. private: vector<int> v; };...
74 просмотров

Как предотвратить повторение кода между функциями-членами rvalue и lvalue?
Для приведенного ниже программного кода мне нужно написать тот же код внутри пары функций-членов, которые получают ссылки на rvalue и lvalue. Моя цель - использовать только один из пары (например, использовать только те, которые принимают rvalue),...
463 просмотров

Переместить конструктор для класса
Я написал два класса, и у меня проблема с их размещением в векторе: #include <vector> #include <iostream> #include <fstream> class A { public: std::ofstream filestream; int aa1; int aa2; int aa3; int aa4;...
639 просмотров

Как можно вызвать конструктор копирования с помощью rvalue
MWE: struct A { A() {std::cout << "constructor" << std::endl; } A(const A& a) {std::cout << "copy constructor" << std::endl; } A(A&& a) {std::cout << "move constructor" << std::endl; }...
330 просмотров

Перемещение семантики в C++11
Я хотел бы полностью понять семантику перемещения в С++ 11. Поэтому я написал пару классов, чтобы увидеть, когда вызываются разные конструкторы: #include <iostream> using namespace std; class A { public: A() : a1_(0) {std::cout...
139 просмотров