总结:
为防止资源泄露,使用RAII对象管理资源,在构造函数中,获取资源,在析构函数中释放资源;
常用RAII class std::auto_ptr (复制时,指向的资源让渡后指向NULL) std::tr1::shared_ptr;
知识细节记录:
1、不使用对象管理获得的资源,存在释放失败获得的资源的风险
void f()
{
Investment* pInv = createInvestment( ); //调用工厂函数
...
delete pInv; //因前面的语句意外退出,可能执行不到这句。
}
2、把资源放进对象内,可依赖C++的析构函数自动调用机制来确保资源被释放;
3、智能指针可以作为资源管理对象。
std::auto_ptr<Investment> pInv(createInvestment( ));
4、RAII定义
5、管理对象运用析构函数确保资源被shif。
6、auto_ptr 复制后,资源让渡
std::auto_ptr<Investment> pInv1(createInvestment( )); //pInv1 指向资源
std::auto_ptr<Investment> pInv2(pInv1); //现在 pInv2 指向资源,pInv1指向NULL
pInv1 = pInv2; //现在 pInv1 指向资源,pInv2指向NULL
7、auto_ptr 不适合需要复制行为的资源的使用,比如STL容器。
8、RCSP 引用计数智慧指针,支持复制 tr1::shared_ptr.
9、auto_ptr 、tr1::shared_ptr 析构函数内做的是delete 不是 delet[]动作,不适合动态分配的资源管理,
比如 new int[10]
网友评论