条款12: 以对象管理资源 两种只能指针: std:auto_ptr当使用copy操作室,原先的智能指针指向为nullstd:tr1:share_ptr spi();当可以多个指向同样的地址,但是当delete是会进行根据指向改地址的指针数量是否要delete这块内存条款13 在资源管理中小心cop...
分类:
编程语言 时间:
2015-05-09 23:23:57
阅读次数:
227
《Effective C++》第三章:资源管理
以对象管理资源。一份资源,可能是一片内存,可能是一个锁,当客户申请后需要手动释放才是合理的,那么最好在获得这份资源的时候,就立刻把它放到一个对象里(RAII技术),然后在对象的析构函数里释放它。这样释放操作就不会被遗忘了,并且,就算在使用资源类的语境中有语句抛出异常,也能确保资源得到正确的释放。
在资源管理类中小心coping行为。有的资源是不支持co...
分类:
编程语言 时间:
2015-04-21 11:16:58
阅读次数:
167
//---------------------------15/03/30----------------------------
//#13 以对象管理资源
{
void f()
{
Investment *pInv = createInvestment();
...
delete pInv;
...
分类:
编程语言 时间:
2015-03-31 09:08:29
阅读次数:
179
13.以对象管理资源
void f()
{
Investment* pInv = createInvestment();
...
delete pInv;
}
以上代码存在问题:在delete之前出现异常,导致pInv无法删除,造成资源泄露。
解决方法:RAII Resource Acq...
分类:
编程语言 时间:
2015-03-17 16:00:09
阅读次数:
304
为防止资源泄漏,请使用RAII(Resource Acquisiton Is Initialization) 对象,它们在构造函数中获得资源并在析构函数中释放资源。两个常被使用的RAII classes 分别是tr1::shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比...
分类:
编程语言 时间:
2015-01-30 22:23:54
阅读次数:
171
第3部分:资源管理(Resource Management)
个人认为这是C++的比较关键的地方,利用好,可以使项目节约资源,合理利用内存资源,防止内存泄露。对于“资源”这两个字,可能刚接触,比较抽象,但你结合一下实际,也有很具体了!
条款13:以对象管理资源
条款14:在资源管理类中小心coping行为
条款15:在资源管理类中提供对原始资源的访问
条款16:成对使用new和delete时要采用相同的形式
条款17:以独立语句将newed对象置入智能指正...
分类:
编程语言 时间:
2014-12-23 12:26:21
阅读次数:
140
其实我们已经在C/C++中见到过多次标准类型数据间的转换方式了,这种形式用于在程序中将一种指定的数据转换成另一指定的类型,也即是强制转换,比如:int a = int(1.23),其作用是将1.23转换为整形1。然而对于用户自定义的类类型,编译系统并不知道如何进行转换,所以需要定义专门的函数来告诉编译系统改如何转换,这就是转换构造函数和类型转换函数!
一、转换构造函数...
分类:
编程语言 时间:
2014-12-02 11:54:43
阅读次数:
190
auto_ptr是当前C++标准库中提供的一种智能指针,诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心的使用它才能保证不出错,以至于它甚至无法适用于同是标准库中的那么多的容器和一些算法,但即使如此,我们仍然不能否认这个小小的auto_ptr所蕴含的价值与理念。
这里用了Nicolai
M. Josuttis(>作者)写的一个auto_ptr的版本,并...
分类:
编程语言 时间:
2014-12-01 16:03:22
阅读次数:
193
RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。
使用局部对象管理资源的技术通常称为“资源获取就是初始化”。这种通用技术依赖...
分类:
编程语言 时间:
2014-12-01 16:02:54
阅读次数:
136
顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:
#include
#include
#include
class implementation
{
public:
~implementation() { std::cout <<"destroying implementation\n"; }
void d...
分类:
编程语言 时间:
2014-12-01 16:00:11
阅读次数:
163