Item 13: 使用对象管理资源
资源管理对象:资源管理对象管理着其他对象的资源,当资源管理对象的析构函数被调用时,所管理的资源会被自动释放。资源管理对象就是在其析构函数中写了释放所管理对象的资源的语句。
Resource Acquisition Is Initialization (RAII):获取一个资源并在同一个语句中初始化资源管理对象(获得资源后应该立即移交给资源管理对象),这样就可以使用资源管理对象对资源进行管理。如std::auto_ptr pInv(createInvestment());
,其中createInvestment()
返回资源,并利用此资源初始化pInv
,pInv
管理的就是createInvestment()
所返回的对象的资源。
书中介绍了两种资源管理类,分别为std::auto_ptr
和tr1::shared_ptr
std::auto_ptr
:被拷贝的auto_ptr对象会被置空。
tr1::shared_ptr
:拷贝操作发生时,对象的引用计数加一。
auto_ptr
或tr1::shared_ptr
不能用于动态分配的数组,因为它们背后使用的是delete,而不是delete []。
动态数组可以使用boost::scoped_array
和boost::shared_array