条款 13:以对象管理资源
Use objects to manage resources
- 所谓资源就是,一旦用它,将来必须还你给系统。
- 单纯依靠函数进行资源释放行不通
class Investment{...};
Investment* creatInvestment();
void f(){
Investment* pInv=creatInvestment();
...
delete pInv;
}
- 把资源放进对象内,我们便可以依靠C++的析构函数 自动调用机制确保资源被释放。
- “以对象管理资源”的关键想法:1.获得资源后立即放进管理对象内。2.管理对象利用析构函数确保资源被释放
- 关于auto_ptr的一些知识:
void f(){
std::auto_ptr<Investment> pIvn(creatInvestment());
...
}
void f(){
std::auto_ptr<Investment> pInv1(creatInvestment());
atd::auto_ptr<Investment> pInv2(pInv1);
pInv1=pInv2;
}
void f(){
std::tr1::shared_ptr<Investment> pIvn(creatInvestment());
...
}
void f(){
std::tr1::shared_ptr<Investment> pInv1(creatInvestment());
atd::tr1::shared_ptr<Investment> pInv2(pInv1);
pInv1=pInv2;
...
}
请记住
1. 为防止资源泄漏,请使用资源管理对象,他们在构造函数中获得资源并在析构函数中释放资源. 2. 两个常被使用的资源管理对象是tr1::shared_ptr和auto_ptr.前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使他(被复制物)指向null.
|