条款 13:以对象管理资源
Use objects to manage resources.
依赖人为的 delete 掉 new 出来的资源,基本是行不通的,忘记、过早 return、代码修改等都会引起资源没有被正确释放导致内存泄露
以对象管理资源的两个关键想法:
- 获得资源后立即放入对象,这个观念又被称为:资源取得时机便是初始化时机,即 RAII(Resource Acquisition Is Initialization)
- 管理对象运用析构函数确保资源被释放
void f()
{
std::auto_ptr<Investment> pInv(CreateInvestment());
...
}
- 可以使用 auto_ptr 来管理资源,该对象析构时释放资源。需要注意 auto_ptr 被复制时,原指针将变成 NULL,保证同时只有一个指针指向资源。若需要支持正常复制,则需要使用 shared_ptr
- 需要注意 delete 和 delete[],对应 new 和 new[]