boost::noncopyable

继承noncopyable的类,不允许拷贝构造和赋值。省去了,每次手动把类的拷贝构造和赋值函数写在private下。

1 私有派生于noncopyable的类都不能复制和赋值

2 原理是:noncopyable内部禁止了赋值和复制。

3 该类可以被很好被复用,减少工作量,不用把想要禁止赋值和复制的类都自行定义私有的赋值和复制方法,只需从该类派生即可

头文件: #inlucde <boost/noncopyable.hpp>

class noncopyable
  {
   protected:
      noncopyable() {}
      ~noncopyable() {}
   private:  // emphasize the following members are private
      noncopyable( const noncopyable& );
      const noncopyable& operator=( const noncopyable& );
  };

class noncopyable的基本思想是把构造函数和析构函数设置protected权限,这样子类可以调用,但是外面的类不能调用,那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是noncopyable把拷贝构造函数和拷贝赋值函数做成了private的,继承自noncopyable的类在执行拷贝操作时会调用基类的拷贝操作,但是基类的拷贝操作是private的,因此无法调用,引发编译错误。但是当子类自己定义拷贝和赋值时,这样就可以使用了。

示例:

  

 1 #include <iostream>
 2 #include <boost/noncopyable.hpp>
 3 using namespace std;
 4 using namespace boost;
 5 class A:public noncopyable
 6 {
 7  public:
 8    A(int _id)
 9   {
10      id=_id;
11   }
12   int print()
13   {
14      return id;
15   }
16 /*   //自己定义A的构造函数就可以拷贝
17    A(const A& a)
18    {
19       this->id=a.id;
20     }
21 */
22 private:
23   int id;
24 
25 }
26 int main()
27 {
28    A ab(100);
29   cout<<ab.print()<<endl;
30   // A abc=ab;
31   //cout<<abc.print()<<endl;
32 
33 }
原文地址:https://www.cnblogs.com/buzhidao1/p/13386678.html