Автоматическое создание операций перемещения
В C 11 введение семантики перемещения подняло вопросы об обстоятельствах, при которых перемещаются конструкторы и присваиваются перемещения. операторы генерируются автоматически.
В C 11 операции перемещения не генерируются автоматически, как конструкторы копирования и операторы присваивания копирования. Компилятор генерирует семантику перемещения только в том случае, если выполняются определенные условия:
Понимание этих правил помогает при реализации классов, использующих семантику перемещения. В таблице из презентации Говарда Хиннанта представлен краткий обзор автоматического создания специальных членов, включая операции перемещения:
Объявление | Конструктор копирования | Копировать оператор присваивания | Переместить конструктор и переместить назначение Оператор |
---|---|---|---|
Нет | Сгенерировано | Сгенерировано | Не создано |
Конструктор копирования | Нет Сгенерировано | Сгенерировано | Не сгенерировано |
Копировать оператор присваивания | Не сгенерировано | Не сгенерировано | Нет Сгенерировано |
Конструктор перемещения | Не создано | Не создано | Не создано |
Оператор присваивания перемещения | Нет Сгенерировано | Не сгенерировано | Не сгенерировано |
Деструктор | Не сгенерировано | Не сгенерировано | Не создано |
Копировать Конструктор и оператор присваивания копирования | Не создано | Не создано | Не создано |
Конструктор копирования и конструктор перемещения | Не создано | Не Создано | Не создано |
Конструктор копирования и оператор присваивания перемещения | Не создано | Не создано | Не создано Сгенерировано |
Копировать оператор присваивания и перемещать Конструктор | Не создан | Не создан | Не создан |
Копировать оператор присваивания и перемещать оператор присваивания | Не создано | Не создано | Не создано Сгенерировано |
Конструктор и деструктор перемещения | Не сгенерировано | Не сгенерировано | Не сгенерировано |
Переместить оператор присваивания и деструктор | Нет Сгенерировано | Не создано | Не создано |
Конструктор копирования, оператор копирования и конструктор перемещения | Не создано | Не создано | Не Сгенерировано |
Конструктор копирования, оператор копирования и оператор присваивания перемещения | Не создано | Не создано | Не создано |
Конструктор копирования, конструктор перемещения и назначение перемещения Оператор | Не создано | Не создано | Создано |
Копировать оператор присваивания и перемещать конструктор и перемещать оператор присваивания | Не создано | Не Сгенерировано | Сгенерировано |
Признавая эти правила, разработчики могут гарантировать, что их классы правильно используют семантику перемещения и достигают оптимальной эффективности.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3