Думаю что все помнят что в C++03 для того, что бы сделать какой-либо класс защищенным от копирования было необходимо объявить его конструктор копирования и защищенными.
public:
Foo(){}
~Foo(){}
private:
Foo(const Foo&);
Foo& operator=(const Foo&);
};
И при попытке создать копию объекта компилятор бил по рукам. Не очень наглядное, тем не менее отлично работающее решение. В C++11 наглядность возрасла благодаря ключевому слову
public:
Foo(){}
~Foo(){}
Foo(const Foo&) = delete;
Foo& operator=(const Foo&) = delete;
};
Но, полезные функции
T* clone(const T *obj) {
return new T{*obj};
}
Foo* clone(const Foo *obj) = delete;
Само собой, все работашие для C++03 решения продолжают работать, но наглядность явного удаления той или иной функции в C++11 посредствам