//class Resource {
//public:
// Resource(parms p): r(allocate(p)) { }
// ~Resource() { release(r); }
// // also need to define copy and assignment
//p...
分类:
其他好文 时间:
2015-02-28 20:07:59
阅读次数:
286
复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。普遍而常见的RAII class copying行为是:抑制copying(使用私有继承Uncopyable)、施行引用计数法(reference counting)(即std::tr1::...
分类:
编程语言 时间:
2015-01-31 12:01:18
阅读次数:
223
为防止资源泄漏,请使用RAII(Resource Acquisiton Is Initialization) 对象,它们在构造函数中获得资源并在析构函数中释放资源。两个常被使用的RAII classes 分别是tr1::shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比...
分类:
编程语言 时间:
2015-01-30 22:23:54
阅读次数:
171
1.什么是RAII 技术?
我们在C++中经常使用new申请了内存空间,但是却也经常忘记delete回收申请的空间,容易造成内存溢出,于是RAII技术就诞生了,来解决这样的问题。RAII(Resource Acquisition Is Initialization)机制是Bjarne Stroustrup首先提出的,是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的...
分类:
编程语言 时间:
2015-01-22 23:23:58
阅读次数:
211
在使用new和delete要注意的事项,以及使用智能指针时要注意的事项。...
分类:
编程语言 时间:
2015-01-16 22:23:45
阅读次数:
181
在系统中,资源是有限的,一旦用完必须归还给系统,否则可能会造成资源耗尽或其他问题。例如,动态分配的内存如果用完不释放会造成内存泄漏。
这里说的资源不仅仅是指内存,还包括其他,例如文件描述符、网络连接、数据库连接、互斥锁等。
在任何情况下都要把不使用的资源归还系统是一件非常困难的事情。尤其是考虑到异常、函数内多重回传路径等。
基于对象的资源管理办法几乎可以消除资源管理的问题。...
分类:
编程语言 时间:
2015-01-14 22:55:36
阅读次数:
250
在effective C++经常会提到智能指针,这里对shared_ptr进行一个总结:
1 简要介绍用法
智能指针主要是用于资源管理,当申请一个资源的时候为了保证在离开控制流的时候对应资源应该得到相应的释放,这个时候如果资源对应一个类,在构造类的时候进行资源的分配(也就是书中经常提到的Resource Acquisition Is Initialization RAII),在对象离开作用域...
分类:
其他好文 时间:
2015-01-13 15:59:01
阅读次数:
298
在阅读 Effective C++时,对RAII开始不理解,现总结如下:
RAII是Resource acquisition is initialization的缩写形式,即“资源获取就是初始化”,是C++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。
根据RAII 对资源的所有权可分为常性类型和变性类型,代表者分别是boost:shared_ptr和std::auto_ptr;从所管资源的初始化位置上可分为外部初始化类型和内部初始化类型。...
分类:
编程语言 时间:
2014-12-29 18:32:33
阅读次数:
177
RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。
使用局部对象管理资源的技术通常称为“资源获取就是初始化”。这种通用技术依赖...
分类:
编程语言 时间:
2014-12-01 16:02:54
阅读次数:
136
为啥推荐使用scoped_lock和RAII idiom变流行是一样的原因:因为你可以确包任何情况下离开执行范围都会解锁mutex注意,这不仅仅是说你可能忘记调用unlock():在你的mutex被锁定之后,还有可能抛出异常,你写的unlock调用语句有可能永远没有机会执行,即使在lock()和un...
分类:
其他好文 时间:
2014-10-21 00:55:24
阅读次数:
379