博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
禁止使用类的copy构造函数和赋值操作符
阅读量:4127 次
发布时间:2019-05-25

本文共 1069 字,大约阅读时间需要 3 分钟。

如果想让你的类不能使用copy构造函数和赋值操作符,只要将该类的copy构造函数和赋值操作符函数定义为private即可,并且只是声明,不用实现.
  1. class TestClass
  2. {
  3. public:
  4.     TestClass()
  5.         :X(0)
  6.     {
  7.     }
  8.     TestClass(int x)
  9.         :X(x)
  10.     {
  11.     }
  12.     ~TestClass(){
    }
  13.     void Show()
  14.     {
  15.         cout << "X = " << X << endl;
  16.     }
  17. private:
  18.     TestClass(const TestClass&);
  19.     TestClass& operator=(const TestClass&);
  20. private:
  21.     int X;
  22. };
  23. int main()
  24. {
  25.     TestClass t(3);
  26.     t.Show();
  27.     TestClass t1(t);
  28.     TestClass t2;
  29.     t2 = t;
  30.     return 0;
  31. }

编译错误为:

'TestClass::TestClass' : cannot access private member declared in class 'TestClass'

'TestClass::operator =' : cannot access private member declared in class 'TestClass'

这种方法的一点小缺陷是,如果该类的成员函数或其friend函数调用copy构造函数或赋值操作符函数,会将错误推后到连接期。有一种方法可以将连接期错误移至编译期。

先定义一个基类

  1. class UnCopyable
  2. {
  3. public:
  4.     UnCopyable();
  5.     ~UnCopyable();
  6. private:
  7.     UnCopyable(const UnCopyable&);
  8.     UnCopyable& operator=(const UnCopyable&);
  9. };

然后让你的类继承UnCopyable类

  1. class TestClass : public UnCopyable
  2. {
  3. public:
  4.     TestClass()
  5.         :X(0)
  6.         ,Y(0)
  7.     {
  8.     }
  9.     TestClass(int x, int y)
  10.         :X(x)
  11.         ,Y(y)
  12.     {
  13.     }
  14.     ~TestClass(){
    }
  15.     void Show()
  16.     {
  17.         cout << "X = " << X << ", Y = " << Y << endl;
  18.     }
  19. private:
  20.     int X;
  21.     int Y;
  22. };

其继承方式,不一定为 public,亦可为private

转载地址:http://uguvi.baihongyu.com/

你可能感兴趣的文章
CSS3的flexbox布局
查看>>
前端面试题系列
查看>>
HTML优化技巧
查看>>
Javascript模块化编程
查看>>
Bootstrap(五) 导航条、分页导航
查看>>
Bootstrap(六) 其它内置组件
查看>>
HTML DOM querySelector() 方法
查看>>
js 事件冒泡和事件捕获的区别
查看>>
Web前端性能优化(一)减少Http请求
查看>>
Web前端性能优化(二)使用内容分发网络
查看>>
Web前端性能优化(四)压缩组件
查看>>
Web前端性能优化(五)网站样式和脚本
查看>>
Web前端性能优化(六)减少DNS查找、避免重定向
查看>>
Web前端性能优化(七)精简JS 移除重复脚本
查看>>
Web前端性能优化(八)配置ETag
查看>>
Web前端性能优化(九)图像和Cookie优化
查看>>
jQuery-DOM节点的创建
查看>>
jQuery-DOM节点的插入
查看>>
jQuery-DOM节点的删除
查看>>
jQuery-DOM节点的复制与替换
查看>>