博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
条款6:如果不想使用编译器自动生成的函数,就应该明确的拒绝。
阅读量:7222 次
发布时间:2019-06-29

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

  有些情况自己是不希望生成拷贝构造函数以及拷贝赋值运算符的,这种时候不能只是自己不去编写这些函数,因为这样编译器会自动的去生成这些函数。保险一点的做法是将拷贝构造函数以及拷贝赋值运算符都声明为private的。这样既阻止了编译器生成默认的版本,而且又阻止了别人去调用它。

    注意上面的这条“将成员函数声明为private而故意的不去实现它”是一种常用手段,即使是标准程序库中有的部分也是这样做的。
class HomeForSale//很明显,销售的两个方子一般内容都是不相同的,所以拷贝构造函数以及{                //拷贝赋值运算符一般都是不需要的    public:        ...    private:        ...        HomeForSale(const HomeForSale &);//注意,这两个函数只有声明        HomeForSale operator=(const HomeForSale &);}

  但是这里还存在一个问题就是友元函数以及其他的成员函数还是有可能会调用这两个实际上没有底定义的函数,所以这里还要用到另外一种技巧:可以让HomeForSale继承自一个uncopyable基类即可:

class UnCopyAble{    protected:        UnCopyAble(){}        ~UnCopyAble(){}    private:        UnCopyAble(const UnCopyAble & ){}//禁止拷贝。        UnCopyAble & operator(const UnCopyAble & ) }

再让HomeForSale继承自UnCopyAble:

class HomeForSale : public UnCopyAble{    public:        ...    private:        ...}
这样当HomeForSale的友元或者成员函数想要调用赋值或者拷贝构造函数的时候,由于其基类的拷贝以及赋值构造函数是属于private的,所以编译器会拒绝这种操作。
 
小结:为了禁止编译器自动生成的一些功能,可以将相应的成员函数声明称private的不予实现,使用类似UnCopyAble类似的base class也是一种方法。

转载于:https://www.cnblogs.com/-wang-cheng/p/4854941.html

你可能感兴趣的文章
配置 PM2 实现代码自动发布
查看>>
android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
查看>>
iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
查看>>
诡异!React stopPropagation失灵
查看>>
Python_OOP
查看>>
个人博客开发系列:评论功能之GitHub账号OAuth授权
查看>>
mongodb--安装和初步使用教程
查看>>
ES6简单总结(搭配简单的讲解和小案例)
查看>>
text-decoration与color属性
查看>>
如何使用Mybatis第三方插件--PageHelper实现分页操作
查看>>
PyCharm搭建GO开发环境(GO语言学习第1课)
查看>>
Android交互
查看>>
提醒我喝水chrome插件开发指南
查看>>
列表数据转树形数据
查看>>
Java新版本的开发已正式进入轨道,版本号18.3
查看>>
从零开始的webpack生活-0x009:FilesLoader装载文件
查看>>
在electron中实现跨域请求,无需更改服务器端设置
查看>>
gitlab-ci配置详解(一)
查看>>
听说你叫Java(二)–Servlet请求
查看>>
案例分享〡三拾众筹持续交付开发流程支撑创新业务
查看>>