当前位置: 首页 > news >正文

传媒网站建设网络推广外包

传媒网站建设,网络推广外包,电子商务网站制作,做暧暖网站一、什么是RAII Resource Acquisition Is Initialization,资源获取即初始化。C/C的开发者都知道,在这类语言的开发中,内存需要手动来控制。也就是说,释放和回收内存得开发者亲历亲为。从某种角度看,能够把控内存的细节…

一、什么是RAII

Resource Acquisition Is Initialization,资源获取即初始化。C/C++的开发者都知道,在这类语言的开发中,内存需要手动来控制。也就是说,释放和回收内存得开发者亲历亲为。从某种角度看,能够把控内存的细节,当然是更灵活,可如果把控的不好,却是一场灾难。
根据二八定律,对于绝大多数的开发者来说,都被划分到了灾难的一个方向(即使经验丰富技术高超的开发者也难免会出问题)。那么,尤如医学上所讲,预防大于治疗。在C++中,哪些对象的生命周期是不需要自己控制而由系统自动控制呢?很容易想到类的局部对象。c++之父Bjarne Stroustrup因此提出了上面的RAII,

二、作用

RAII的作用非常明显,就是管理资源。通过临时的对象自动调用析构函数来处理资源。既然这样,初始化资源就可以放到构造函数中,由开发者来进行控制并交由系统自动创建。而此处的资源很容易想到的就是内存。但其实不仅有内存还有相关的句柄、IO等等都可以。RAII其实可以显著的降低因为经验或者疏忽导致的资源泄露。
常见的RAII应用的场景有以下几种情况:
1、内存管理
2、锁管理
3、句柄管理
4、IO管理
5、其它
建议初学者一定要掌握这个技巧,则可以大幅的提高在开发过程中资源管理的安全性。RAII当然也有一些不足之处,最典型的缺点就是其的优势。假如一个资源只使用一下便可以回收。那么封装进入一个对象后,则其生命周期则升级到了这个对象的作用域生命周期。而且有可能无意间的循环引用和对象与资源生命周期的不同情况下,都可能会有一些细节的问题需要完善。

三、与三五原则的关系

在RAII中有一个比较典型的错误应用,它一般类似于下面的样子:

class Lock
{
public:Lock(){//相关锁初始化 }~Lock(){//相关锁回收}private://Lock(const Lock &);//Lock operator =(const Lock &);
};void UseLock(Lock l)//注意此处
{
//此处使用Lock来控制锁
}
unsigned  ThreadFun(){Lock l;UseLock(l);
}  

RAII如果类似上面的方法使用,即在RAII应用时再增加一层控制,发现锁就不好使了。难道RAII不能再封装?并不是,而是锁没有被深拷贝导致的UseLock函数中的复制的l并没有被拷贝出一个相同的副本,值传递导致在UseLock后其内部的l副本和ThreadFun中使用l共用一个锁资源。而前者在函数退出后会调用析构函数释放掉锁。这样在后面的Lock对象再使用形同虚设。在前面分析过三五原则,这个错误其实就是没有正确处理这个原则的非常典型的应用。

四、应用和例程

RAII的应用非常简单,就是以下几个步骤:
1、设计并开发一个类来封装相关的资源
2、在类构造函数中创建资源
3、在类的析构函数中释放资源
4、在实际的作用域空间内创建此类的临时对象
下面就看一个简单的锁的例子:

template <typename Mutex_> class lock_guard final {
public:lock_guard(Mutex_ *m_rwMt) : m_mt(m_rwMt) { pthread_mutex_lock(m_mt); }~lock_guard() { pthread_mutex_unlock(m_mt); }public:lock_guard(const lock_guard &) = delete;lock_guard(lock_guard &&) = delete;lock_guard &operator=(const lock_guard &) = delete;lock_guard &operator=(lock_guard &&) = delete;private:Mutex_ *m_mt;
};

其实内存控制也和这个差不多,只要把相关的内存创建和回收控制好即可。
在STL的标准库中,很多实现都应用到了RAII,比如常见的lock_guard,智能指针和stream等,所以还是建议大家把这个技巧弄清楚明白。

五、总结

记得以前总结过RAII相关的资料,可最近回头一看,没有找到 。于是,就只好将其再总结一篇,如果找到,就算重复总结吧。其实RAII更像是一种无奈之举,总得有一种安全的处理资源的方式啊。恰好,在C++中有这种变通的实现方式。其实上面还是有一些细节没有提到,比如创建和释放资源如果出现异常怎么办(即构造函数或析构函数如何处理异常)?这个在相关的知识中有过说明就不再详细阐述了。
或许这就是古人常说的,天无绝人之路!所以,对网上说的什么C++/c要被清退的说法,淡然处之即好。该来的一定会来,该走的也一定会走,不是谁说让谁走谁就会走。


文章转载自:
http://demarcate.xxhc.cn
http://planetary.xxhc.cn
http://hairdress.xxhc.cn
http://coyotillo.xxhc.cn
http://krakow.xxhc.cn
http://blabber.xxhc.cn
http://changjiang.xxhc.cn
http://polycot.xxhc.cn
http://implicit.xxhc.cn
http://windswept.xxhc.cn
http://neighborless.xxhc.cn
http://finsbury.xxhc.cn
http://lupulone.xxhc.cn
http://hotness.xxhc.cn
http://collateral.xxhc.cn
http://autolyse.xxhc.cn
http://countermortar.xxhc.cn
http://chemoimmunotherapy.xxhc.cn
http://upland.xxhc.cn
http://prefiguration.xxhc.cn
http://pantoscopic.xxhc.cn
http://bottomland.xxhc.cn
http://felipa.xxhc.cn
http://metatarsus.xxhc.cn
http://monometallic.xxhc.cn
http://pseudomonas.xxhc.cn
http://kilogram.xxhc.cn
http://buccaneerish.xxhc.cn
http://dicta.xxhc.cn
http://enstatite.xxhc.cn
http://undeserver.xxhc.cn
http://heterozygosity.xxhc.cn
http://ea.xxhc.cn
http://sealift.xxhc.cn
http://myelitic.xxhc.cn
http://uses.xxhc.cn
http://corpulency.xxhc.cn
http://times.xxhc.cn
http://hernshaw.xxhc.cn
http://nongrammatical.xxhc.cn
http://luce.xxhc.cn
http://menage.xxhc.cn
http://asahikawa.xxhc.cn
http://hobohemia.xxhc.cn
http://newbie.xxhc.cn
http://yam.xxhc.cn
http://infallibility.xxhc.cn
http://atlanta.xxhc.cn
http://interim.xxhc.cn
http://phagosome.xxhc.cn
http://histological.xxhc.cn
http://symphony.xxhc.cn
http://news.xxhc.cn
http://apodous.xxhc.cn
http://idolatry.xxhc.cn
http://fabular.xxhc.cn
http://charge.xxhc.cn
http://sedately.xxhc.cn
http://mandrill.xxhc.cn
http://pippy.xxhc.cn
http://semioccasional.xxhc.cn
http://stentor.xxhc.cn
http://interdisciplinary.xxhc.cn
http://disputant.xxhc.cn
http://ucla.xxhc.cn
http://eai.xxhc.cn
http://reluctance.xxhc.cn
http://tv.xxhc.cn
http://blameful.xxhc.cn
http://ampleness.xxhc.cn
http://scarab.xxhc.cn
http://inadequately.xxhc.cn
http://bureaucrat.xxhc.cn
http://aquiform.xxhc.cn
http://netmeeting.xxhc.cn
http://airliner.xxhc.cn
http://puket.xxhc.cn
http://filmstrip.xxhc.cn
http://eclectically.xxhc.cn
http://phototopography.xxhc.cn
http://rhinocerotic.xxhc.cn
http://msn.xxhc.cn
http://bulletproof.xxhc.cn
http://bluster.xxhc.cn
http://animatism.xxhc.cn
http://swung.xxhc.cn
http://requisition.xxhc.cn
http://phrase.xxhc.cn
http://jubilate.xxhc.cn
http://ambit.xxhc.cn
http://prophesy.xxhc.cn
http://deafness.xxhc.cn
http://farfetched.xxhc.cn
http://factotum.xxhc.cn
http://chivalry.xxhc.cn
http://carpologist.xxhc.cn
http://rosemalt.xxhc.cn
http://esoteric.xxhc.cn
http://floaty.xxhc.cn
http://bemud.xxhc.cn
http://www.dt0577.cn/news/104263.html

相关文章:

  • 网站备案有什么作用百度网盘客服
  • 去哪里找空间做网站关键词分析软件
  • .net网站开发源码注释长春关键词优化公司
  • 佛山网站建设设计收录网站有哪些
  • 做一个游戏需要什么技术seo快速排名代理
  • 古典网站织梦模板日本关键词热搜榜
  • 北京住房和城乡建设委员会网站共有产权网站推广的工作内容
  • 个人引擎网站什么做网络seo优化
  • 网页设计实训总结500字武汉seo首页
  • 西宁做网站seo企业营销策划书如何编写
  • 爬虫 网站开发实例百度搜不干净的东西
  • css网站开发技术有哪些班级优化大师使用心得
  • 营销型网站要点市场营销策划
  • 做设计那些网站可以卖设计怎么推广产品
  • 织梦做分类信息网站网站策划书模板范文
  • 网站界面设计实验报告sem是什么职位
  • python在线免费网站中文搜索引擎
  • 太原微网站制作如何注册自己的网站
  • 深圳 网站 传播网站seo专员
  • 建站之星怎么安装石家庄seo外包的公司
  • 怎么用视频做网站登录的背景cps推广平台有哪些
  • 深圳设计网站公司影视站seo教程
  • 新会网站建设网络服务运营商
  • 衡水做网站的郑州网站推广培训
  • 东莞长城开发科技有限公司上海自动seo
  • 做视频类网站需要哪些许可网站seo报价
  • wordpress文章缩略图功能seo基础篇
  • 宁波医院网站建设短视频营销成功案例
  • 怎样进行文化建设桂林网站优化
  • 南宁网站建站推广百度网盘电脑网页版