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

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

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

Что это за идиома и когда он должен использоваться? Какие проблемы он решает? Изменяется ли идиома при использовании С++ 11? Хотя это упоминалось во многих местах, у нас не было никаких особых вопросов "что это" и ответа, так что вот оно. Вот неполн...
19 июл. '10 в 8: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 в 18: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 в 1:03
3

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

Я читал Копировать и своп. Я пробовал читать некоторые ссылки на Copy Elision, но не мог понять, что это значит. Может кто-нибудь объяснить, что такое оптимизация, и особенно то, что означает следующий текст Это не просто вопрос удобства, а фактич...
27 янв. '10 в 0: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 в 11:33
2

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

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

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

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

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

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

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

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

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

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

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

После прочтения этого об идиоме копирования и свопинга я прочитал this, который гласит: (2): class_name & class_name :: operator= ( const class_name & ) (2) (2) Типичное объявление оператора присваивания копии, когда не может исп...
16 нояб. '15 в 11: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 в 14:48
3

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

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

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

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

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

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