永发信息网

为什么 c++ noncopyable

答案:1  悬赏:70  手机版
解决时间 2021-03-26 16:23
为什么 c++ noncopyable
最佳答案
boost中的noncopyable今日粗看boost的代码,发现很多类都继承noncopyable,以下是noncopyable的代码:classnoncopyable{protected:noncopyable(){}~noncopyable(){}private://emphasizethefollowingmembersareprivatenoncopyable(constnoncopyable&);constnoncopyable&operator=(constnoncopyable&);};这里的设计思想是让子类继承,但是阻止子类调用赋值和copy构造函数,有什么用呢?写代码的时候我经常喜欢用singleton模式,比如那些工厂类,管理者类之类的,但是写这些singleton的时候当然是希望全局只有一个,而且不希望别人在用的时候又自己创造一个,往往就要每写一个singleton类就要在类的declaration中把它们的构造函数,赋值函数,析构函数,copy构造函数隐藏到private或者protected之中,这样真的很累。现在好了,只要让这些singleton直接继承noncopyable就ok了。这样至少可以不用多写赋值和copy构造函数了;构造和析构函数看情况而定了。classnoncopyable的基本思想是把构造函数和析构函数设置protected权限,这样子类可以调用,但是外面的类不能调用,那么当子类需要定义构造函数的时候不至于通不过编译。但是最关键的是noncopyable把copy构造函数和copy赋值函数做成了private,这就意味着除非子类定义自己的copy构造和赋值函数,否则在子类没有定义的情况下,外面的调用者是不能够通过赋值和copy构造等手段来产生一个新的子类对象的。举个简单的例子:classTest:publicnoncopyable{};voidmain(){Testa,c;Testb(a);///<------(1)errorc=a;///<------(2)error}如果Test类没有继承noncopyable,那么(1)和(2)都可以通过编译,但是一旦Test继承了noncopyable,则(1)和(2)都通不过编译,从而可以防止调用者写一些错误的代码,这不正是我们做singleton对象所需要的吗?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
加热消失笔的原理
乳晕大黑要怎么办
正常的阅读速度是怎样的,比如读完《战争与和
范姓女孩起名叠字 ,我姓范,想给姑娘起个叠
下午算易经准吗
跪求英语大神把下面的文字翻译为英文,最好可
关于初中女生穿内衣问题,请男生勿进
客厅3.9米,餐厅2.5是不是太窄
基友们,现在流行的网络流行语都有哪些
VB:如何返回vb一维数组某个元素所对应的下标
单选题西北地区的城镇,集中分布在A.平原上B.
广东一区刷爆头房的YY多少
生男生女都一样,女孩也是传后人 从什么时候
奔驰2018款
银行借款期限怎么计算
推荐资讯
servlet中doget dopost一定被执行吗
在天津二手车市场购买二手车,都有什么需要注
2o14是()世纪()年代
0kr是什么意思?
专利zl201010622516,1
终于体验到什么是绝望了
用想起……想起……就想起……造句
化学饱和溶液问题
我的心是雨后的冷清 这是什么歌啊??
摩的摩的的史不凡简介
张老师让同学们计算:当a=0.25,b=-0.37时,
做梦买豆片是怎么回事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?