Объявите удалёнными копирующий и перемещающий конструкторы и оба оператора присваивания. Конструктор без параметров можно оставить доступным.
Определение класса с запрещёнными операциями копирования и перемещения
Объявите удалёнными копирующий и перемещающий конструкторы и оба оператора присваивания. Конструктор без параметров можно оставить доступным.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо объявить класс и сделать его некопируемым и не перемещаемым, удалив соответствующие конструкторы и операторы.
class MyClass {
public:
MyClass();
// запретить копирование и перемещение
};
Ответ
Объявите удалёнными копирующий и перемещающий конструкторы и оба оператора присваивания. Конструктор без параметров можно оставить доступным.
class MyClass {
public:
MyClass() = default;
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
MyClass(MyClass&&) = delete;
MyClass& operator=(MyClass&&) = delete;
};
Экземпляр можно создать непосредственно на месте, но нельзя копировать или перемещать существующий объект. Ссылки и невладеющие указатели передавать можно. В C++17 гарантированное устранение копирования в некоторых выражениях также позволяет создавать результат без вызова запрещённых операций.