Описание тега copy-and-swap

Идиома подкачки копий в C++ может использоваться для упрощения реализации оператора присваивания за счет использования конструктора копирования для создания локальной копии и замены ее на текущий объект.
3 ответа

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

Тестирование новой семантики Move. Я только что спросил о проблемах, которые у меня были с конструктором Move. Но, как выясняется в комментариях, проблема в том, что оператор "Назначение перемещения" и оператор "Стандартное назначение" конфликтуют п…
07 ноя '13 в 16:41
1 ответ

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

В следующем коде, когда используется оператор присваивания, почему не вызывается конструктор копирования или почему ему не соответствует print? #include <iostream> #include <cstring> using std::cout; using std::endl; class Person { priva…
4 ответа

Как семантика перемещения улучшит "мой путь"?

Фон Ранее я прочитал следующие ответы сегодня, и это было похоже на переизучение C++, буквально. Что такое семантика перемещения? Что такое идиома копирования и обмена? Тогда я подумал, стоит ли мне менять "способы" использования этих захватывающих…
04 фев '15 в 01:45
0 ответов

Зачем мне нужен способ копирования и обмена?

Я не вижу смысла в использовании идиомы копирования и обмена в C++11. Если мне нужна ручка, я могу использовать unique_ptr или же shared_ptr, Если мне нужна коллекция предметов, я могу просто vector или же string, struct Relax { shared_ptr<Textur…
09 июн '16 в 11:17
6 ответов

Повторное использование идиомы копирования и обмена

Я пытаюсь поместить идиому копирования и замены в многократно используемый миксин: template<typename Derived> struct copy_and_swap { Derived& operator=(Derived copy) { Derived* derived = static_cast<Derived*>(this); derived->swap(…
4 ответа

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

Например, stdlibC++ имеет следующее: unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*this); __u._M_device = 0; __u._M_owns = false; return *this; } Почему бы просто не назначить двух чл…
3 ответа

Можно ли иметь реализацию члена для обмена броском?

Общая рекомендация при написании классов (с использованием идиомы копирования и обмена) заключается в предоставлении функции-члена без броска свопинга. ( Действующий C++, 3-е издание, пункт 25 и другие ресурсы) Однако что, если я не могу предоставит…
3 ответа

Что такое правило четырех (с половиной)?

Для правильной работы с объектным копированием эмпирическое правило - это правило трех. В C++11 семантика перемещения - это вещь, так что вместо этого это правило пяти. Тем не менее, в дискуссиях здесь и в Интернете я также видел ссылки на Правило Ч…
1 ответ

Ошибка компоновки в функции-другом класса шаблона

У меня есть узел класса шаблона и для того, чтобы следовать идиоме копирования и замены, я пытаюсь написать swap функция, которая является friend класса Node мой код: Node.h #ifndef NODE_H #define NODE_H #include<memory> template<typename t…
26 ноя '16 в 07:26
3 ответа

Неэффективность идиомы копирования и обмена?

Я тестировал некоторый код, где есть std::vector член данных внутри класса. Класс является копируемым и подвижным, а operator= реализуется, как описано здесь, с использованием идиомы копирования и замены. Если есть два vector скажи v1 с большой емко…
03 мар '13 в 17:03
2 ответа

Общая память без блокировки в C++ для записей переменной длины

Я новичок в IPC. Процесс Writer записывает данные в общую память, Многие процессы чтения считывают данные. Данные, которые должны быть записаны, имеют уникальный идентификатор, должны быть проиндексированы по уникальному ключу для более быстрого дос…
02 фев '12 в 14:22
3 ответа

Скопируйте и поменяйте идиомы с чистого виртуального класса

Я пытаюсь реализовать виртуальный класс с чисто виртуальным методом и идиомой "копировать и менять", но я столкнулся с некоторыми проблемами. Код не скомпилируется, потому что я создаю экземпляр в операторе присвоения класса A, который содержит чист…
06 май '14 в 14:07
1 ответ

Эффективность копирования и обмена для общих указателей

Это можно рассматривать как продолжение, например. Почему присвоение общего указателя делает "своп"?, Вопрос об идиоме Copy&Swap;, используемой, например, в boost. Я понимаю, что преимущество Copy&Swap; заключается в повторном использовании существу…
30 июл '18 в 11:13
1 ответ

C++: идиома копирования и замены, альтернативный конструктор

NB: Этот вопрос следует за предыдущим, я надеюсь, что все еще можно задавать его как новый вопрос. Я пытаюсь реализовать "правило трех с половиной" (идиома копирования и замены) для класса дерева, который выглядит следующим образом: class Tree { fri…
09 авг '13 в 04:20
2 ответа

Копирование и замена через интерфейсы

Я пытаюсь реализовать идиому "копировать + своп" для достижения безопасности с сильными исключениями через уровень абстракции и, хотя принцип ясен, как это часто бывает, дьявол кроется в деталях. Скажем, у меня есть класс, который выглядит так: clas…
22 мар '12 в 17:33
1 ответ

Как правильно сделать глубокую копию для абстрактных классов?

Я работаю над системой столкновений, для которой мне нужно скопировать коллайдеры сущностей. Я делаю систему такой, что мне не нужно задавать в камне то, как я хочу обрабатывать столкновения (и я, вероятно, начну использовать AABB, но могу перейти н…
15 апр '17 в 11:23
2 ответа

Сбросить объект

В последнее время я часто сбрасываю объект, назначая ему новое значение с помощью operator=, Большинство моих занятий имеют copy constructor а также operator= определяется с помощью идиомы "копировать и менять". Что отлично работает в большинстве сл…
19 фев '16 в 11:23
0 ответов

Копирование и подстановка не рекомендуется?

В течение долгого времени я думал, что правильным способом реализации назначения копирования (для нетривиального класса) было использование идиомы copy-swap. struct A{ ... pointer to data A(A const& other){ ... complicated stuff, allocation, loo…
22 июл '18 в 08:35
3 ответа

Почему мы используем копирование и обмен при использовании оператора присваивания?

У меня есть вопрос об операторе присваивания при использовании метода копирования и замены. String & operator = (String s) // the pass-by-value parameter serves as a temporary { s.swap (*this); // Non-throwing swap return *this; }// Old resource…
2 ответа

Идиома swap and copy не может использоваться в абстрактном классе

Я столкнулся с интересной ошибкой, когда попытался использовать идиому копирования и замены в абстрактном классе. Следующий код специально создан для демонстрации этой ситуации, если что-то не так, скажите мне, но не сосредотачивайтесь: template &lt…
22 май '16 в 21:35