Я думаю, что они все в порядке.
= delete
подходит для гарантии того, что перегрузка не используется (§8.4.3 / 2), что полезно вне классов.
Теперь, через 5 месяцев, я смотрю на другие ответы ... delete
полезна не только для функций с неявными определениями. Это чистая альтернатива комментарию о том, что «нет реализации - использование этого является ошибкой компоновщика». Он предоставляет явный способ не реализовывать что-либо, например, базовый шаблон, где фактически существуют только явные специализации. Компилятор будет пожаловаться до времени ссылки.
Для немного странного, но вполне разумного примера рассмотрим
class abc {
protected:
inline virtual ~abc() = 0;
inline virtual void do_something() = 0;
};
abc::~abc() {}
void abc::do_something = delete;
Обе = 0
и = delete
могут использоваться для одной и той же функции. Без = delete
пользователь может случайно вызвать любезность по номеру abc::do_something()
.
Я не удивлюсь, если следующая итерация C ++ после C ++ 0x добавит явно удаленные классы.