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