浅析boost库之noncopyable
1.介绍
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable( const noncopyable& );
const noncopyable& operator=( const noncopyable& );
};
通常编译器都是程序员的好朋友,但并不总是。它的好处之一在于它会自动为我们提供复制构造函数和赋值操作符,如果我们决定不自己动手去做的话。这也可能会导致一些不愉快的惊讶,如果这个类本身就不想被复制(或被赋值)。如果真是这样,我们就需要明确地告诉这个类的使用者复制构造以及赋值是被禁止的。我不是说在代码中进行注释说明,而是说要禁止对复制构造函数以及赋值操作符的访问。幸运的是,当类带有不能复制或不能赋值的基类或成员函数时,编译器生成的复制构造函数及赋值操作符就不能使用。boost::noncopyable 的工作原理就是禁止访问它的复制构造函数和赋值操作符,然后使用它作为基类。
2.使用
在代码中你可以这样使用:
class test_classs:noncopyable { .... } 即可。
上述代码是 class test_classs:private noncopyable { .... } 的简写形式,
代码中如果出现
test_class a;
test_class b(a); //编译报错
因为在test_class本身没有拷贝构造函数时,b(a)试图调用基类 noncopyable( const noncopyable& );,但被声明为private,导致报错。