引入
在进行下一步的学习之前,我们需要厘清几个概念.
RAII
首先介绍一个编程习语,”RAII”(ResourceAcquisition Is Initialization,资源获取即为初始化),他描述了利用构造函数\析构函数,并在函数返回时自动析构的机制.简言之,RAII意为构造函数获取一种资源;打开一个文件,一个网络连接,或仅仅是从某I/O流中复制一些标志.这种获取是对象初始化的一部分...
分类:
编程语言 时间:
2014-07-30 17:45:34
阅读次数:
346
RAIIRAII是Resource Acquisition Is
Initialization的缩写,是在面向对象(object-oriented)语言中使用的一种编程习惯,主要是用来在C++中处理异常安全资源管理(exception-safe
resource management)。在RAII中...
分类:
其他好文 时间:
2014-07-22 23:14:13
阅读次数:
501
方法一:借助auto、decltype、unique_ptr、Lambda表达式构造 sqlite3 *db = NULL; auto deleter = [](sqlite3 *pdb){sqlite3_close(pdb);} int nRet = sqlite3_open16(L"F:\\my...
分类:
编程语言 时间:
2014-07-16 22:59:07
阅读次数:
385
RAII:(Resource Acquisition Is Initialization),也就是“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII 的做法是使用一个对象,在其构造时获...
分类:
编程语言 时间:
2014-06-28 20:01:21
阅读次数:
298
(一)
下面代码:
tr1::shared_ptr pInv(createInvestment());
int daysHeld(const Investment* pi);
我们要调用daysHeld函数的话,就必须传递一个Investment指针,但是我们现在只有pInv对象,所以我们需要一个函数可将RAII class(本例为tr1::shared_ptr)对象转换为其所内含之原始资...
分类:
编程语言 时间:
2014-06-16 11:55:57
阅读次数:
250
条款14:在资源管理类中小心coping行为
在前一个条款,我们提出了RAII(资源获得即是初始化)技术,通过“对象管理资源”达到防止资源泄露,对于通过堆分配的内存,可以借助指针指针实现,但系统中有很多资源不是堆分配:文件句柄,锁,网络套接字。这些资源就需要自己实现对象来管理。...
分类:
其他好文 时间:
2014-06-05 10:48:28
阅读次数:
210
auto_ptr是C++标准库中()为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针)auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。std::auto_ptr
pa(new Cl...
分类:
其他好文 时间:
2014-06-02 17:12:02
阅读次数:
210
RAII是resourceacquisitionisinitialization的缩写,意为“资源获取即初始化”。它是C++之父BjarneStroustrup提出的设计理念,其核心是把资源和对象的生命周期绑定,对象创建获取资源,对象销毁释放资源。在RAII的指导下,C++把底层的资源管理问题提升....
分类:
编程语言 时间:
2014-06-02 16:45:20
阅读次数:
305
折腾C++的类型系统是一个很有意思的事情。当钻进去之后就会发现,一些原先比较晦涩的基本概念,在研究的过程中都清晰了不少。
check_type的实用价值在于,可以利用它清晰的看见C++中一些隐藏的类型变化。比如完美转发时的引用折叠。
在实现check_type的过程中,用到了不少泛型,甚至元编程的小技巧,充分运用了C++在预处理期、编译期和运行期(RAII)的处理能力。虽然这些代码仅是学习研究时的兴趣之作,实际项目中往往typeid的返回结果就足够了,但上面的不少技巧对一些现实中的项目开发也有一定的参考和...
分类:
编程语言 时间:
2014-05-16 01:44:26
阅读次数:
354
众所周知,C++中对堆内存的申请与释放完全由用户来控制,这就造成用户在使用的时候经常造成内存泄漏、野指针、重复释放等常见的挂掉问题,所以我们有必要提供一套机制,使得用户只需申请相应的内存,不用管释放的问题,其实这属于著名的RAII(Resource
Acquisition Is Initialization)
技术 。在C++中这种技术称作“智能指针”,C++中的智能指针技术越来越受到广泛应...
分类:
编程语言 时间:
2014-05-13 11:37:49
阅读次数:
358