Определение класса с запрещёнными операциями копирования и перемещения

Объявите удалёнными копирующий и перемещающий конструкторы и оба оператора присваивания. Конструктор без параметров можно оставить доступным.

Короткий ответ

Что ответить на собеседовании

Объявите удалёнными копирующий и перемещающий конструкторы и оба оператора присваивания. Конструктор без параметров можно оставить доступным.

Подробный разбор

Ответ с пояснениями

Условие

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

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 гарантированное устранение копирования в некоторых выражениях также позволяет создавать результат без вызова запрещённых операций.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее