C++类禁止copy构造函数和copy assign操作符
来源:互联网 发布:js全栈开发教程 编辑:程序博客网 时间:2024/06/06 23:16
在C++类中,编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。注意,这些编译器产生出来的函数都是public的,为了阻止这些函数被创建出来,我们可以把它们声明为private,这样就阻止了编译器暗自创建其对应版本函数。
class Node{public:Node(int _data = 0) : data(_data) {}int get() const { return data; }void set(int _data) { data = _data; }private:Node(const Node &);Node &operator=(const Node &);int data;};在上面的class定义中,当程序企图拷贝Node对象时,编译器就会阻止该操作。这样的话,只要将copy构造函数和copy assign操作符声明为private就可以了,还有另外一种方式,我们可以专门定义一个阻止copying动作的base class。这个base class如下所示:
class Uncopyable{protected:Uncopyable() {} // 允许derived对象构造和析构~Uncopyable() {}private:Uncopyable(const Uncopyable &); // 阻止copyingUncopyable &operator=(const Uncopyable &);};class Node : private Uncopyable{public:Node(int _data = 0) : data(_data) {}int get() const { return data; }void set(int _data) { data = _data; }private:int data;};这样的话,在程序中,甚至在member函数或friend函数中,尝试拷贝Node对象,编译器就会试着生成一个copy构造函数或copy assign操作符,这些函数的“默认版本”会尝试调用其base class的对应函数,但是这些调用会被阻止,因为它们是private的,即阻止了该类对象的copy操作。
参考资料:
1、《Effective C++ 第3版》 条款6
1 0
- C++类禁止copy构造函数和copy assign操作符
- 禁止使用类的copy构造函数和赋值操作符
- 禁止使用类的copy构造函数和赋值操作符
- C++中拒绝编译器自动生成copy构造函数和copy赋值运算符操作(6)---《Effective C++》
- copy构造函数与copy assignment操作符的区别
- copy构造函数与copy assignment操作符区别
- Object c assign/retain/copy
- 2.copy构造函数和拷贝操作符‘=’的区别
- copy构造函数 和 赋值函数
- retain,copy,assign和autorelease
- copy构造函数
- 禁用copy构造函数
- copy构造函数
- copy拷贝构造函数
- 关于copy构造函数和operator=
- 类复制构造函数copy constructor
- 禁止类的拷贝构造函数和赋值操作符
- Objective-C 2.0属性(Property) retain,copy,assign,copy
- CSS中的长度单位,宽度自适
- android Media Route Provider
- ARM+linux系统移植3G拨号上网收发短信(三)
- Maven学习总结(五)——聚合与继承
- 火狐浏览器打不开的修复方法和原因
- C++类禁止copy构造函数和copy assign操作符
- vs2008静态编译Qt4.8.6
- win10+vs2013+cuda7.5环境搭建
- Maven学习总结(六)——Maven与Eclipse整合
- QT跨平台--JAVA 命名规范
- python hashlib 模块
- Android 网络图片缓存
- 2015-12-02
- Codeforces Round #280 (Div. 2)B. Vanya and Lanterns(贪心)