boost学习笔记之noncopyable

来源:互联网 发布:tensorflow应用领域 编辑:程序博客网 时间:2024/06/05 23:58

先来看一个例子:

#include <iostream>using namespace std;class test{public:        test(){cout<<"test()"<<endl;}//protected:        test(test&){cout<<"test(test&)"<<endl;}        void operator=(const test&){cout<<"operator="<<endl;}};int main(){        test t;         //test()        test p(t);      //test(test&)        test p1 = t;    //test(test&)        return 0;}
C++默认如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝,位拷贝又称浅拷贝。也就是说默认的C++类是允许复制的。那么如何实现一个不能拷贝的类呢?只需要将上面代码的注释打开。用protected或者private修饰重写的拷贝构造函数即可。这时候test p(t);test p1 = t;2个语句就会报错

boost中noncopyable实现的原理就是如此。故我们使用boost实现一个不可拷贝的类的时候只需要继承noncopyable类即可。使用noncopyable需要包含头文件

#include <boost/noncopyable.hpp>



原创粉丝点击