分析muduo网络库中,用于现场同步的互斥量和条件变量,以及一个组合CountDownLatch...
分类:
其他好文 时间:
2015-07-26 15:50:43
阅读次数:
297
1. 智能指针(Smart Pointer)i.是存储指向动态分配(堆)对象指针的类ii.在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象iii.RAII类模拟智能指针,见备注2. C++11提供了以下几种智能指针,位于头文件,它们都是模板类i.std::auto_ptr(复制/赋...
分类:
编程语言 时间:
2015-07-21 22:07:28
阅读次数:
212
C++中的RAII机制指明”对象创建时通过构造函数进行初始化,析构时通过析构函数释放资源”,但实际中因类无构造函数时编译器将自动合成一个默认构造函数,该构造函数只服务于自身编译器构造需要而不负责对象成员构造,如这个实例中对象A成员val,next均未进行初始化,而对象B由于是类对象则调用其默认构造函...
分类:
编程语言 时间:
2015-06-25 12:12:24
阅读次数:
188
析构函数不能抛出异常,原因析构函数已经变成了异常处理的一部分如果对象出了异常,现在异常处理模块为了维护系统对象数据的一致性,避免资源泄漏,有责任释放这个对象的资源,调用对象的析构函数,可现在假如析构过程又再出现异常,那么请问由谁来保证这个对象的资源释放呢?而且这新出现的异常又由谁来处理呢?咋办呢?3...
分类:
其他好文 时间:
2015-05-01 00:32:41
阅读次数:
121
《Effective C++》第三章:资源管理
以对象管理资源。一份资源,可能是一片内存,可能是一个锁,当客户申请后需要手动释放才是合理的,那么最好在获得这份资源的时候,就立刻把它放到一个对象里(RAII技术),然后在对象的析构函数里释放它。这样释放操作就不会被遗忘了,并且,就算在使用资源类的语境中有语句抛出异常,也能确保资源得到正确的释放。
在资源管理类中小心coping行为。有的资源是不支持co...
分类:
编程语言 时间:
2015-04-21 11:16:58
阅读次数:
167
C++11提供了两种管理锁的类
std::lock_guard:与mutex RAII相关,方便线程对互斥量上锁std::unique_lock: 与mutex RAII相关,方便线程对互斥量上锁,相比std::lock_guard提供了更好的上锁和解锁控制
一 lock_guard详解
lock_guard是一个模板类:templateclass lock_guar...
分类:
编程语言 时间:
2015-04-17 15:53:43
阅读次数:
422
概念使用局部对象管理资源的技术通常称为“资源获取就是初始化”Resource Acquisition Is Initialization 机制是Bjarne Stroustrup首先提出的。要解决的是这样一个问题:在C++中,如果在这个程序段结束时需要完成一些资源释放工作,那么正常情况下自然是没有什么问题,但是当一个异常抛出时,释放资源的语句就不会被执行。于是Bjarne Stroustrup就想到...
分类:
其他好文 时间:
2015-04-10 18:05:31
阅读次数:
173
RAII,也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。例如,我们无需直接调用一对非成员函数OpenPort/ClosePo...
分类:
其他好文 时间:
2015-03-20 23:40:51
阅读次数:
281
13.以对象管理资源
void f()
{
Investment* pInv = createInvestment();
...
delete pInv;
}
以上代码存在问题:在delete之前出现异常,导致pInv无法删除,造成资源泄露。
解决方法:RAII Resource Acq...
分类:
编程语言 时间:
2015-03-17 16:00:09
阅读次数:
304
RAII : Resource Acquisition Is Initialization 获取资源就是初始化。本质是将资源分配过程进行重新封装管理资源的分配和回收,实际上就是以构造函数形式进行资源分配,析构形式进行资源回收。详细说明:http://www.cnblogs.com/hsinwang/...
分类:
其他好文 时间:
2015-03-03 13:25:43
阅读次数:
176