首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

effective c++ - 资源管理

2012-10-12 
effective c++ -- 资源管理所谓资源就是,一旦用了它,将来必须还给系统。最常见的资源是动态分配内存,另外常

effective c++ -- 资源管理

所谓资源就是,一旦用了它,将来必须还给系统。最常见的资源是动态分配内存,另外常见的资源还有:文件描述器、互斥锁、图形界面中的字形和笔刷、数据库连接、以及网络socket.

?

Item 13: 以对象管理资源
该条款背后的思想在于:把资源放进对象内,我们被可以倚赖C++的“析构函数自动调用机制”确保资源被释放。
假设如下类及函数:

processWidget( std:tr1::shared_ptr<Widget>( new Widget ), priority() );

?在进入processWidget函数体之前,编译器需要做三件事:
(1)调用priority
(2)执行new Widget
(3)调用tr1::shared_ptr构造函数
关于这三件事的执行顺序,我们能肯定的只有,(2)一定执行于(3)之前,但是(1)可能在(2)前(2)后还是(3)前(3)后执行并不确定,如果编译器决定以这样的顺序执行这三件事:
(2),(1),(3)
可是可是,在执行(1)即调用priority()的时候出异常了!new Widget返回的指针将遗失,也就是,在我们还没来得及把它托付给shared_ptr前,它便泄漏了,那么我们便达不到使用智能指针的初衷了。这便是“以独立语句将new出来的对象置入智能指针”的原因了。这样调用processWidget:
std::tr1::shared_ptr<Widget> pw( new Widget );?//在独立语句内把资源托付给智能指针
processWidget( pw, priority() );
这样就不怕编译器进行可能导致泄漏的重新排列了。

热点排行