Вопросы с тегом 'copy-and-swap'

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

Что такое идиома копирования и свопинга?

Что это за идиома и когда он должен использоваться? Какие проблемы он решает? Изменяется ли идиома при использовании С++ 11? Хотя это упоминалось во многих местах, у нас не было никаких особых вопросов "что это" и ответа, так что вот оно. Вот неполн...
задан 19 июля '10 в 11:42
2
ответов

функция обмена членами публичного друга

В прекрасном ответе copy-and-swap-idiom есть часть кода, мне нужно немного помочь: class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow { using std::swap; swap(firs...
задан 17 апр. '11 в 21:35
4
ответов

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

Например, stdlibС++ имеет следующее: 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; } Почему ...
задан 14 июля '11 в 4:03
3
ответов

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

Я читал Копировать и своп. Я пробовал читать некоторые ссылки на Copy Elision, но не мог понять, что это значит. Может кто-нибудь объяснить, что такое оптимизация, и особенно то, что означает следующий текст Это не просто вопрос удобства, а фактич...
задан 27 янв. '10 в 3:37
3
ответов

Если Idiom с копией и сменой становится Idiom Copy-and-Move в С++ 11?

Как объяснено в этом ответе, идиома копирования и свопинга реализована следующим образом: class MyClass { private: BigClass data; UnmovableClass *dataPtr; public: MyClass() : data(), dataPtr(new UnmovableClass) { } MyClass(con...
задан 03 июня '14 в 14:33
2
ответов

Копировать и перемещать идиому?

Используя Копировать и своп, мы с легкостью реализуем назначение копирования с надежной безопасностью: T& operator = (T other){ using std::swap; swap(*this, other); return *this; } Однако для этого требуется T быть Swappable. Како...
задан 12 апр. '17 в 14:35
1
ответ

Когда перегрузка проходит по ссылке (l-value и r-value), предпочтительной для передачи по значению?

Я видел, что он сказал, что a operator=, записанный для принятия параметра того же типа по-значению, служит как оператором присваивания копии, так и оператором присваивания перемещения в С++ 11: Foo& operator=(Foo f) { swap(f); return *...
задан 18 авг. '13 в 23:22
3
ответов

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

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

Почему у std::vector есть два оператора присваивания?

С 2011 года у нас есть как копирование, так и перемещение. Однако этот ответ достаточно убедительно доказывает, что для классов управления ресурсами нужен только один оператор присваивания. Например, для std::vector это будет выглядеть как vector&a...
задан 21 нояб. '15 в 2:01
2
ответов

Как использовать noexcept в операторе присваивания с идиомой копирования и свопинга?

Оператор присваивания переходов часто должен быть объявлен noexcept (т.е. хранить тип в контейнерах STL). Но идиома "копирование и своп" позволяет определять как операторы присваивания копий, так и операции перемещения в одном фрагменте кода. Что дел...
задан 17 сент. '13 в 14:07
2
ответов

Когда не поддерживается идиома копирования и свопинга

После прочтения этого об идиоме копирования и свопинга я прочитал this, который гласит: (2): class_name & class_name :: operator= ( const class_name & ) (2) (2) Типичное объявление оператора присваивания копии, когда не может исп...
задан 16 нояб. '15 в 14:59
6
ответов

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

Я пытаюсь поместить идиому copy-and-swap в многоразовый mixin: template<typename Derived> struct copy_and_swap { Derived& operator=(Derived copy) { Derived* derived = static_cast<Derived*>(this); derived->s...
задан 16 авг. '11 в 17:48
3
ответов

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

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

Безопасное назначение и идиома "копирование и своп"

Я изучаю С++, и недавно я узнал (здесь, в переполнении стека) об идиоме с копией и заменой, и у меня есть несколько вопросов об этом. Итак, предположим, что у меня есть следующий класс, использующий идиому с копией и заменой, например: class Foo { p...
задан 06 мая '11 в 3:25
2
ответов

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

Для правильной обработки копирования объектов эмпирическое правило является Правилом три. С С++ 11, перемещение семантики - это вещь, поэтому вместо нее Rule of Five. Однако в дискуссиях вокруг здесь и в Интернете я также видел ссылки на Правило Четы...
задан 18 авг. '17 в 13:17