• 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 }
  • 相关阅读:
    POJ 2947:Widget Factory 求同余方程
    高斯消元几道入门题总结POJ1222&&POJ1681&&POJ1830&&POJ2065&&POJ3185
    POJ 1166:The Clocks
    神经网络 --学习之路,资料汇编
    机器学习 入门资料汇编
    无符号 coredump调试
    CentOS 6.3 升级软件 gcc等,并安装部署DNN环境 (未完成,不完整)
    OpenCL size_t error
    Nervanasys --> pycuda --> installation
    tmux.conf
  • 原文地址:https://www.cnblogs.com/buzhidao1/p/13386678.html
Copyright © 2020-2023  润新知