RAII被认为是c++资源管理的最佳范式,但是c++98中用RAII必须为要管理的资源写一个类,这样一来RAII的使用就有些繁琐了。C++11有了lambda和function后,我们就可以编写泛化的RAII,实现ScopeGuard,优雅地解决这个问题。本文主要参考刘未鹏的博客。 主要代码如下 c
分类:
编程语言 时间:
2016-02-27 13:48:32
阅读次数:
190
异常安全有两个目标: 不泄露任何资源。这个通过RAII可以做到。 不破坏数据结构。这是下文要讨论的事情 异常安全有三个级别: 基本安全:异常发生后对象和数据结构还有合法状态。实现简单,应该作为最低要求。 很安全:抛出异常后程序状态不变。即要有“原子性”,若成功则完全成功,失败则保持原状。本文的cop
分类:
编程语言 时间:
2016-02-20 21:36:28
阅读次数:
239
class ThreadRAII { public: // whether join or detach should be called, // when a this object is destroyed. enum class DtorAction { join, detach }; Thr
分类:
其他好文 时间:
2016-02-14 01:39:48
阅读次数:
239
我们先来解释一下什么叫智能指针?
智能指针是利用RAII(在对象的构造函数中执行资源的获取(指针的初始化),在析构函数中释放(delete 指针):这种技法把它称之为RAII(Resource Acquisition Is Initialization:资源获取即初始化))来管理资源。
其本质思想是:将堆对象的生存期用栈对象(智能指针)来管理。也就是当new一个堆对象的时候,立刻用智能指针来接...
分类:
其他好文 时间:
2016-01-30 13:57:03
阅读次数:
207
#include #include #include #include #include #include // MutexLock 封装互斥锁的接口class MutexLock{public: MutexLock() { pthread_mutex_init(&mute...
分类:
编程语言 时间:
2015-10-27 01:42:25
阅读次数:
423
NOTE: 1.APIs往往要求访问原始资源(raw resources),所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。 2.对原始资源的访问可能经由显示转换或隐式转换。一般而言显示转换比较安全,但隐式转换对客户比较方便。
分类:
数据库 时间:
2015-09-08 00:16:10
阅读次数:
199
条款14: 在资源管理类中小心copying行为
Think carefully about copying behavior in resource-managing classes
条款13导入这样的观念:"资源取得时机便是初始化时机"(Resource Acquisition Is Initializaiton,RAII),并以此作为"资源管理类"的脊柱,也描...
分类:
编程语言 时间:
2015-09-01 01:47:50
阅读次数:
247
Item 14: Think carefully about copying behavior in resource-managing classes.
在Item 13:使用对象来管理资源中提出了基于RAII的资源管理对象,auto_ptr和shared_ptr。
智能指针可以有不同的拷贝策略。当你实现这样一个资源管理对象时,需要特别注意。比如一个典型的RAII风格的互斥锁实现:...
分类:
编程语言 时间:
2015-08-27 11:14:40
阅读次数:
205
auto_ptr它是C++标准库()为了一个智能指针类模板来解决资源泄漏所提供的问题(注意:这只是一个简单的智能指针)auto_ptr在事实原则的实现RAII,对资源的访问,在施工时间。释放资源时,析构函数,而相关的指针操作超载。使用起来就像普通的指针。std::auto_ptr pa(new Cl...
分类:
编程语言 时间:
2015-08-13 08:49:24
阅读次数:
229
http://www.jellythink.com/archives/101前言在写C++设计模式——单例模式的时候,在写到实例销毁时,设计的GC类是很巧妙的,而这一巧妙的设计就是根据当对象的生命周期结束时会自动调用其析构函数的,而这一巧妙的设计也是有专业的名词的——RAII。那以下将围绕RAII,...
分类:
编程语言 时间:
2015-07-30 19:03:54
阅读次数:
152