本文位置:首页 > > 草根新闻 >

为什么C++中的RAII类一般都是不可复制的?

文章发布时间:2015/7/2 11:05:41



美女小模特过客在行走的雨之中2015年高考如何提高思考力和执行力语不惊人死不休(55)老公是个长途车司机,最近一年总是说肩膀和脖子痛,有什么矮枕头可以缓解颈椎疼痛的?

红木家具的生产流程介绍这才能叫:美到极致!如果把马航事件改编成电影什么样的剧本最好呢?高考必考之英语内容:情态动词考点透视为什么看老版西游记重播的时候,播台老是看见金角银角那集?华贵典雅旗袍丽人(71)怎么理解现在的选秀美学?恩。?【图文】北京交通拥堵是因为房价不够高经典语录:最真实的感情,是没有打扮的自然雷人囧事老爸,我是你亲生的么?有你这样损亲闺女的么?公务员面试考生分享:临考前三天的准备过程[转载]【看连环画】千余部经典怀旧老版连环画【在线阅读】(2)开水烧开后,侧看水面,能看到一层油状物,这是什么?广场舞精选15首江苏2014高考优秀作文:致青春半数女容忍已婚男嫖娼意味啥?有哪些内置游戏多的盒子推荐吗?恋爱是一场为激素干杯的partyAppleStore内的Mac为什么都预装MicrosoftOffice?了解教学常规?掌握教学方法?争做合格教师(三)【养生】煲汤小秘笈,让你变身靓汤达人博客自定义模块怎么用?婚姻战争之出轨:痒(全),婚姻战争之出轨王志文电视剧21部学问再高,不敌这三言两语!法国现代诗抄Windows平台下有什么比较好的RSS阅读器客户端?中医(闻)诊【全】江苏2013年企业退休人员基本养老金上调方案哭红眼眶的伤感爱情语句混凝土搅拌机密封漏浆后更换密封,之后更换频率越来越快,有没有好的解决方案?谢谢。花间妙词如诗.如梦.如画......【经典图文】物联网行业,信息物理融合系统(CPS)有什么好的书籍推荐?最好中外都有一些。怎样了解一个网站背后所用的技术?当你跟老板谈涨工资的时候,都谈些什么?有些穴位千万不能随意按敲如何理解宇宙形状的概念,为什么说宇宙从每个方向上看都是一样的?养老金并轨三个月:新人待遇缩水哪两类人待遇不变?--20150115包身裙

NSK W4013SA-2D-C5Z10 

为什么有些人能力很强却在面试回答中展示不出应有的感觉?夜色阑珊拔丝苹果鲁菜包身裙

为什么C++中的RAII类一般都是不可复制的?这样可以用最简单干净的语义(资源有效期=对象生命周期)覆盖大部分使用场景。剩下的场景可以用别的方法解决。正所谓杀鸡焉用牛刀,虽然两把刀看起来比一把刀复杂,但程序行为更容易把握。

真要复制当然有办法:
1. shared_ptr。基于上述理由,shared_ptr<RAII_object>比RAII_object内嵌shared_ptr好。
2. 复制资源本身。比如handle可以dup(2)。但是这种动作比一般C++对象的复制要重,清晰起见最好用单独的方法而不是operator=来做。


答友:其实不是 RAII 类一般不可复制,而是大多数类一般都不可复制。鉴于 C++ 各种隐式的拷贝、构造过程容易产生混淆,常见的简单可靠的做法是尽量禁用隐式的复制行为,而让有复制需求的类实现 clone() 方法。


答友:RAII类通常是用来管理资源的,而一般来说,资源管理从概念上讲是独占性的。

这是由于资源本身的特殊性造成的。资源一般来说是一个句柄(或者说指针),它的生存周期是由它的持有者(管理者)所决定的。那么当存在多个管理者管理同一个资源时,相互之间就必须要进行一些协调工作。
RAII类属于简单的资源管理者,类和类之间一般来说是不会有复杂的协调工作的。因此当一个RAII类获得了一个资源之后,实际上独占了该资源的管理权(所有权)。这样在自身析构的时候,只需要进行简单的释放工作。
如果RAII类可以复制,那么我们就必须要求它具有共享的资源管理能力 —— 例如std::shared_ptr,使用引用计数作为资源管理者之间的协调机制。否则在RAII类想释放它管理的资源时,如何保证没有其它类持有这个资源呢?

因此,对于非共享的RAII类,即构造时获得资源,析构时简单释放的类,通常只应该具有移动语义,而不应该具备拷贝语义。


答友:以内存为例,RAII类会在构造函数中申请内存,在析构时自动释放,如果可以复制就会释放两次


07月29日龙虎榜:主力资金出逃个股名单一览个股出逃龙虎榜股票代码涨跌幅行业净买入(万元)参与营业部600252 中恒集团10.01%-91080.03方正证券股份有限公司台州解放路证券营业部600391 成发科技10.00%-6291.62兴业证券股份有限公司深圳侨香路证券营业部000923 河北宣工9.99%-5898.12华泰证券股份有限公司深圳益田路荣超商务中心证券营业002691 冀凯股

07月29日龙虎榜:主力资金出逃个股名单一览个股出逃龙虎榜股票代码涨跌幅行业净买入(万元)参与营业部600252 中恒集团10.01%-91080.03方正证券股份有限公司台州解放路证券营业部600391 成发科技10.00%-6291.62兴业证券股份有限公司深圳侨香路证券营业部000923 河北宣工9.99%-5898.12华泰证券股份有限公司深圳益田路荣超商务中心证券营业002691 冀凯股



不存在相应的目录