В соответствии со стандартом,По умолчанию шаг конструктор/присваивание и удален конструктор копирования/назначение
Если определение класса X не явно объявить конструктор перемещения, один будет неявно объявлен дефолт, если и только если
- X не имеет пользовательскую объявленную конструктор копирования,
- X не имеет оператора присваивания копии пользователя заявил,
- X не ч ave пользовательский оператор присваивания оператора и
- X не имеет объявленного пользователем деструктора.
Теперь следующий не удается скомпилировать
# include <utility>
class Foo
{
public:
Foo() = default;
Foo(Foo const &) = delete;
};
int main()
{
Foo f;
Foo g(std::move(f)); // compilation fails here
return 0;
}
Таким образом, кажется, что удаленная функция рассматриваются как определенный пользователь, который имеет смысл (это не его реализация по умолчанию). Однако, в этом конкретном случае, как бы удалить конструктор/назначение перемещения по умолчанию constorutor/assign mess default?
Я думаю, что этот вопрос имеет практическое значение, потому что ручная генерация и esp. поддержание таких функций по умолчанию является склонным к ошибкам, в то время как (праведное) увеличение использования классов, таких как std::unique_ptr
в качестве членов класса, делало не скопируемые классы гораздо более распространенными животными, чем они были раньше.
Не уверен, что хорошо понял ваш вопрос, но почему бы вам не поменять ход ctor? то есть 'Foo (Foo &&) = default;' –