如何禁止C++ 类支持拷贝
来源:互联网 发布:淘宝最老的店铺 编辑:程序博客网 时间:2024/04/28 03:53
如何禁止C++ 类支持拷贝
C++ 编译器默默地为你做了不少工作
- 当你写下
class Empty {};//其实等价于class Empty {public: Empty() { ... } //default constructor Empty(const Empty &rhs) { ... } //copy constructor ~Empty() { ... } //destructor Empty& operator=(const Empty &rhs) { ... } //copy assignment};
- 然而,有的时候,你却想禁止类进行复制。如果你不声明 copy 构造函数或者 copy assignment 操作符,编译器将为你产生一份;如果你声明他们,你的类同样支持 copying。
解决方案:
- 将拷贝构造函数和copy assignment 声明为 private, 并不给出实现; 一般而言,member 函数和 friend 函数还是有可能调用它们,这会导致一个链接错误(因为你没有定义函数)
class A {public:private: A(const A &rhs); //只有声明 A& operator=(const A &rhs);};
- 更好的做法,可以将做法1 的连接错误转移到编译期(越早发现错误越好)。让类继承 如下的base 类这可行的原因在于:只要任何人----甚至是 member 函数 或 friend 函数-----尝试拷贝对象,编译器都会试着生成一个 copy 构造函数和 copy assignment 操作符,而这些函数的“编译器生成版”会尝试调用 base class 的对应兄弟,而这些调用会被编译器拒绝,因此 base class 的拷贝函数是 private。
class Uncopyable {public: Uncopyable() {} ~Uncopyable() {}private: Uncopyable(const Uncopyable&); Uncopyable& operator=(const Uncopyable&);};class B : private Uncopyable {};
还有一点需要注意的是,继承用 private 而不是 public,这样可以阻止public继承时,下列的代码:(内存泄漏,因为通过基类的指针删除派生类对象,基类必须是 virtual 虚函数,否则内存泄漏)Uncopyable *p = new B();...delete p;
5 0
- 如何禁止C++ 类支持拷贝
- c++::如何防拷贝~
- 如何禁止类的拷贝构造函数和复制构造函数
- boost noncopyable实现禁止类拷贝
- boost noncopyable实现禁止类拷贝
- boost noncopyable实现禁止类拷贝
- 如何禁止对象的拷贝和赋值操作
- 禁止拷贝王 官网
- 禁止远程桌面拷贝文件
- 禁止拷贝构造
- 禁止U盘拷贝
- C++ 禁止拷贝
- C++禁止对象拷贝
- boost::noncopyable 禁止拷贝
- 禁止拷贝构造函数
- C++禁止类对象被拷贝的方法
- 禁止类的拷贝构造函数和赋值操作符
- C++回顾之深浅拷贝、禁止拷贝、空类的默认成员
- [C++] 获取IE代理服务器的账号密码
- 数字电路设计之Spice仿真
- jquery UI 跟随学习笔记——拖拽(Draggable)
- Flatten Binary Tree to Linked List
- Oracle XML DB 的使用
- 如何禁止C++ 类支持拷贝
- mysqlimport 导入文件
- ActionBar中的下拉菜单列表导航
- 窗体按钮生效与未生效问题
- 1074. Reversing Linked List
- ip call
- Tomcat集群Cluster实现原理剖析
- bat脚本设置IP
- UIBarButtonSystemItem