zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    在mvc4中上传、导入和导出excel表方法总结
    ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
    .net下使用NPOI读取Excel表数据
    详解免费高效实用的.NET操作Excel组件NPOI(转)
    Vue 定时执行函数
    decorators.xml的用法
    行内元素和块级元素
    C/C++中printf和C++中cout的输出格式
    IIS 搭建过程
    IIS访问共享文件详解
  • 原文地址:https://www.cnblogs.com/buzhidao1/p/13386678.html
Copyright © 2011-2022 走看看