Описание тега move-assignment-operator

1 ответ

В C++, как можно предсказать, будет ли вызвана семантика перемещения или копирования?

Учитывая широту, которой обладает компилятор C++ при создании экземпляров временных объектов и при вызове таких механизмов, как оптимизация возвращаемого значения и т. Д., Не всегда ясно, глядя на некоторый код, будет ли вызываться семантика перемещ…
1 ответ

Действительно ли требуется проверка самопредставления при реализации оператора присваивания перемещения для класса?

Type &Type::operator=(Type &&rhs) { if(this == &rhs) //is there any need of self-assignment . returh *this ; } ... } // поскольку он будет вызываться по r-значению, так почему же самостоятельное назначение??
2 ответа

Перегрузка оператора "*" для класса, возвращающего переменную класса

У меня есть два файла cpp и один файл hpp. Main.cpp, Ab.cpp и Ab.hpp. В этих файлах я создал класс Ab с конструктором по умолчанию и конструктором, который принимает строку. Внутри класса я хочу переопределить оператор *, чтобы установить заданное з…
2 ответа

Почему определение деструктора удаляет неявно определенный оператор присваивания перемещения?

Какова причина выбора стандартным комитетом C++ удаления неявно определенного оператора назначения перемещения, когда определяется настраиваемый деструктор?
02 дек '15 в 12:06
3 ответа

Условия для автоматической генерации оператора по умолчанию / копирования / перемещения ctor и оператора копирования / перемещения?

Я хочу обновить память в условиях, при которых компилятор обычно автоматически генерирует конструктор по умолчанию, конструктор копирования и оператор присваивания. Я помню, что были некоторые правила, но я не помню, а также не могу найти авторитетн…
1 ответ

Комментирование `move constructor` и`move assignment operator` приводит к ошибке компиляции

Я взял следующий код из десяти функций C++11, которые должен использовать каждый разработчик C++. Я хочу видеть вывод с / без move constructor а также move assignment operator, Оригинальный код хорошо компилируется. Но если я закомментирую реализаци…
2 ответа

Как воспользоваться семантикой Move для повышения производительности в C++11?

После многих испытаний я все еще не понимаю, как правильно использовать семантику перемещения, чтобы не копировать результат операции и просто использовать указатель или std:: move для "обмена" указанными данными. Это будет очень полезно для ускорен…
2 ответа

Назначение копирования C++ и перемещение не вызывается

Я пытаюсь реализовать копирование и перемещение заданий, но не понимаю, как их использовать. Я прочитал следующую тему Когда вызывался оператор копирования? Но это не сработало для меня. Учебный класс: class Directory{ string name; public: Directory…
1 ответ

Как правильно передать право собственности на shared_ptr?

У меня есть следующий фрагмент кода: // code snipet one: #include <memory> #include <iostream> #include <queue> struct A { uint32_t val0 = 0xff; ~A() { std::cout << "item gets freed" << std::endl; } }; typedef std::shar…
3 ответа

Как обеспечить использование конструктора перемещения

Код ниже дает ошибку: use of deleted function ‘constexpr B::B(const B&)’ теперь я знаю, что это происходит потому, что конструктор копирования (намеренно) неявно удаляется путем указания конструктора перемещения, а копирование вектора вызывает в…
1 ответ

Какой оператор ctor/ присваивания должен иметь векторный класс?

Я пишу свой собственный векторный класс (контейнер для значений x, y), и я не совсем уверен, какие конструкторы / операторы присваивания я должен реализовать самостоятельно и что я могу рассчитывать на компилятор. Очевидно, мне нужно написать любой …
1 ответ

Наследование оператора присваивания перемещения в C++

Мне нужна помощь в понимании процесса наследования оператора присваивания ходов. Для данного базового класса class Base { public: /* Constructors and other utilities */ /* ... */ /* Default move assignment operator: */ Base &operator=(Base &…
14 июн '18 в 09:52
1 ответ

Что означает пользователь, объявленный для неявно объявленного оператора присваивания перемещения?

Заявление Неявно объявленный оператор присваивания перемещения Если для типа класса (struct, class или union) не заданы пользовательские операторы присваивания перемещения, и все из следующего верно: нет заявленных пользователем конструкторов копиро…
3 ответа

C++ объявить операцию перемещения / копирования будет подавлять генерацию связанных операций?

Я видел предложение на языке программирования C++, с которым я запутался: • Если программист объявляет операцию копирования, операцию перемещения или деструктор для класса, для этого класса не создается операция копирования, операция перемещения или…
1 ответ

Конструктор перемещения и назначение перемещения

Я читал книгу Бьярна Страуструпа (создатель C++) "4-й выпуск языка программирования C++" и изучал конструкторы и назначения перемещений. В книге для вектора класса (см. 1 для заголовка ниже) он показывает, как реализовать конструктор перемещения (см…
3 ответа

Вопросы об операторе назначения переезда

Представьте себе следующий класс, который управляет ресурсом (мой вопрос касается только оператора присваивания перемещения): struct A { std::size_t s; int* p; A(std::size_t s) : s(s), p(new int[s]){} ~A(){delete [] p;} A(A const& other) : s(oth…
23 мар '12 в 23:46
6 ответов

Оператор присваивания и `if (this!= & Rhs)`

В операторе присваивания класса вам обычно нужно проверить, является ли назначаемый объект вызывающим объектом, чтобы вы ничего не испортили: Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *…
3 ответа

Имеет ли смысл повторно использовать логику деструктора, используя std::swap в операторе присваивания перемещения?

Учтите следующее: class Example : boost::noncopyable { HANDLE hExample; public: Example() { hExample = InitializeHandle(); } ~Example() { if (hExample == INVALID_HANDLE_VALUE) { return; } FreeHandle(hExample); } Example(Example && other) : h…
2 ответа

Я могу вызвать деструктор в операторе присваивания ходов?

Является ли вызов d-tor внутри оператора присваивания перемещений хорошей практикой? вот пример кода: VectorList &operator = (VectorList &&other){ ~VectorList(); // if this is not a good practice, // I will need to paste whole d-tor here…
26 сен '15 в 11:34
1 ответ

Как удалить оператор присваивания перемещения и сохранить совместимость с контейнерами std?

У меня есть простая оболочка RAII для управления определенным ресурсом. Вот интерфейс: struct ResourceWrapper { explicit ResourceWrapper(RESOURCE resource); ResourceWrapper(const ResourceWrapper& other); ResourceWrapper& operator=(const Reso…