Описание тега deleted-functions
В C++11 delete
ключевое слово может использоваться для явного запрета использования функции-члена: если она будет удалена, любая попытка ее вызова вызовет ошибку компиляции (во время выполнения разницы нет). Это полезно, когда вызов этой функции может привести к неверным результатам и / или неожиданному поведению.
Примером является класс, который должен управлять уникальным ресурсом: объект этого класса не должен быть копируемым. Обычно, чтобы гарантировать, что функция не используется, программист должен просто избегать ее объявления. Но в некоторых случаях этого недостаточно, потому что некоторые функции могут быть автоматически сгенерированы компилятором, даже если программист их не объявил. Эти функции включают конструкторы, конструкторы копирования / перемещения и назначения копирования / перемещения. Отсутствие их определения не гарантирует, что они не могут быть использованы. Решение - использовать= delete;
синтаксис.
Например, следующий класс объявляет конструктор и деструктор, но удаляет конструктор копирования и присваивание копии:
class Unique_manager {
Unique_manager(); // Constructor
~Unique_manager(); // Destructor
Unique_manager(const Unique_manager&) = delete; // Forbid copy constructor
Unique_manager& operator=(const Unique_manager&) = delete; // Forbid copy assignment
};
В этом случае можно было бы создать объект этого класса:
Unique_manager db_access_manager;
но попытка создать копию из него будет заблокирована компилятором:
Unique_manager another_db_manager(db_access_manager); // Error: copy constructor
Unique_manager one_more_access_manager; // OK: constructor
one_more_access_manager = db_access_manager; // Error: copy assignment