Почему деструктор отключает генерацию неявных методов перемещения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему деструктор отключает генерацию неявных методов перемещения?

Сообщение Anonymous »

Читая этот блог, я пытался понять, что говорит правило нуля. ИМХО, там говорится, что если вы объявляете свой собственный деструктор, не забудьте сделать конструктор перемещения и назначение перемещения по умолчанию.
Пример:

Код: Выделить всё

class Widget {
public:
~Widget();         // temporary destructor
...                // no copy or move functions
};
"Добавление деструктора имеет побочный эффект, заключающийся в отключении
генерации функций перемещения, но поскольку Widget является копируемым, весь
код, который использовался для генерации ходов, теперь будет генерировать копии.
Другими словами, добавление деструктора в класс привело к тому, что
предположительно эффективные ходы были незаметно заменены
предположительно менее эффективными копиями".
/>
Приведенный выше текст Скотта Мейерса в кавычках вызывает у меня некоторые вопросы:

[*]Почему объявление деструктора скрывает семантику перемещения?
[*]Объявление/определение деструктора скрывает только семантику перемещения или копирование
конструктора и присвоение копирования также скрывают семантику перемещения?
/>

Подробнее здесь: https://stackoverflow.com/questions/339 ... ve-methods
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»