«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Когда в C++11 автоматически генерируются конструкторы перемещения и операторы присваивания перемещения?

Когда в C++11 автоматически генерируются конструкторы перемещения и операторы присваивания перемещения?

Опубликовано 26 декабря 2024 г.
Просматривать:469

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  11?

Автоматическое создание операций перемещения

В C 11 введение семантики перемещения подняло вопросы об обстоятельствах, при которых перемещаются конструкторы и присваиваются перемещения. операторы генерируются автоматически.

В C 11 операции перемещения не генерируются автоматически, как конструкторы копирования и операторы присваивания копирования. Компилятор генерирует семантику перемещения только в том случае, если выполняются определенные условия:

  • Не существует пользовательского конструктора копирования или оператора присваивания копирования. Если любой из этих членов определен явно, перемещение не выполняется. генерируются операции.
  • Пользовательский деструктор не определен. Определение деструктора отключает генерацию перемещения семантика.
  • Класс не имеет некопируемых членов. Операции перемещения не генерируются, если класс содержит элементы, которые невозможно переместить, например указатели на динамически выделяемую память.

Понимание этих правил помогает при реализации классов, использующих семантику перемещения. В таблице из презентации Говарда Хиннанта представлен краткий обзор автоматического создания специальных членов, включая операции перемещения:

ОбъявлениеКонструктор копированияКопировать оператор присваиванияПереместить конструктор и переместить назначение Оператор
НетСгенерированоСгенерированоНе создано
Конструктор копированияНет СгенерированоСгенерированоНе сгенерировано
Копировать оператор присваиванияНе сгенерированоНе сгенерировано Нет Сгенерировано
Конструктор перемещенияНе созданоНе созданоНе создано
Оператор присваивания перемещенияНет СгенерированоНе сгенерированоНе сгенерировано
ДеструкторНе сгенерированоНе сгенерированоНе создано
Копировать Конструктор и оператор присваивания копированияНе созданоНе созданоНе создано
Конструктор копирования и конструктор перемещенияНе созданоНе СозданоНе создано
Конструктор копирования и оператор присваивания перемещенияНе созданоНе созданоНе создано Сгенерировано
Копировать оператор присваивания и перемещать КонструкторНе созданНе созданНе создан
Копировать оператор присваивания и перемещать оператор присваивания Не созданоНе созданоНе создано Сгенерировано
Конструктор и деструктор перемещенияНе сгенерированоНе сгенерированоНе сгенерировано
Переместить оператор присваивания и деструкторНет СгенерированоНе созданоНе создано
Конструктор копирования, оператор копирования и конструктор перемещенияНе созданоНе созданоНе Сгенерировано
Конструктор копирования, оператор копирования и оператор присваивания перемещенияНе созданоНе созданоНе создано
Конструктор копирования, конструктор перемещения и назначение перемещения ОператорНе созданоНе созданоСоздано
Копировать оператор присваивания и перемещать конструктор и перемещать оператор присваиванияНе созданоНе СгенерированоСгенерировано

Признавая эти правила, разработчики могут гарантировать, что их классы правильно используют семантику перемещения и достигают оптимальной эффективности.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3