Заголовок<<boost/noncopyable.hpp>
>определяет класс<boost::noncopyable
>. Предназначен для использования в качестве частной базы.<boost::noncopyable
>имеет частный (в соответствии с C++03) или удаленный (в соответствии с C++11) конструктор копий и оператор присвоения копий и не может быть скопирован или назначен; класс, который происходит от него, наследует эти свойства.
<boost::noncopyable
>Изначально его автором был Дэйв Абрахамс.
namespace boost
{
class noncopyable;
}
#include <boost/core/noncopyable.hpp>
class X: private boost::noncopyable
{
};
Класс некопируемый имеет защищенные конструкторы и деструкторы, чтобы подчеркнуть, что он должен использоваться только в качестве базового класса. Дэйв Абрахамс отмечает озабоченность по поводу влияния на оптимизацию компилятора добавления (даже тривиальных встроенных) деструкторных деклараций. Он говорит:
“Вероятно, эта проблема неуместна, потому что<noncopyable
>будет использоваться в основном для классов, которые владеют ресурсами и, таким образом, имеют нетривиальную семантику разрушения.& #8221;
С помощью C++2011 можно использовать оптимизированный и тривиальный конструктор и аналогичный деструктор, объявляя их и маркируя<default
>. Это делается в рамках нынешней реализации.