问答

禁用拷贝类函数

作者:admin 2021-08-03 我要评论

看网上的方法,三种当中的一种是,实现一个父类: class uncopyable{protected: uncopyable(){} ~uncopyable(){}private: uncopyable(const uncopyable); uncopy...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

看网上的方法,三种当中的一种是,实现一个父类:

class uncopyable{
protected:
    uncopyable(){}
    ~uncopyable(){}
private:
    uncopyable(const uncopyable&);
    uncopyable& operator=(const uncopyable&);
}

然后让子类继承父类,这里我一直对public private protected理解不透,子类继承为啥一定要private,还有就是类uncopyable为啥将构造和析构设置为protected???

关于public private protected,有没有好的介绍资料,网页or书都ok.

###

· 既然是 uncopyable 那自然就是不可拷贝的,那拷贝构造和赋值函数自然要是私有的(连子类也不能调用否则就不是uncopyable了),你也可以使用

uncopyable(const uncopyable&) = delete;
uncopyable& operator=(const uncopyable&) = delete;

简洁明了

· 把构造函数和析构函数设为protected的确不是个明智的办法,因为哪怕你在子类中重载了构造函数和析构函数,你也无法藉由基类指针来析构对象,这样的话很多功能比如智能指针都会报错。
如果只是想阻止别人实例化对象的话而只将其作为接口的话,你完全可以使用纯虚类来完成。

public:
    uncopyable() {}
    virtual ~uncopyable() = 0;
###
  1. 子类继承不是要private吧,public或者protected都行。
  2. 对于nocopyable的构造函数和析构函数

    • 不能是public,否则外部可以直接构造nocopyable
    • 不能是private,否则派生类没法访问,派生类没法构造
    • 只能是protected,基类protected属性在派生类中可以访问
  3. 继承权限关系

image.png

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 禁用拷贝类函数

    禁用拷贝类函数

  • chrome不支持Flash后,网页要怎么播放

    chrome不支持Flash后,网页要怎么播放

  • vue前端使用会员读卡器,该如何写

    vue前端使用会员读卡器,该如何写

  • 二进制的位是从0开始数,还是从1开始数

    二进制的位是从0开始数,还是从1开始数

腾讯云代理商
海外云服务器