13.以对象管理资源
13.1 为防止资源泄漏,请使用RAII(Resource Acquisition Is Initialization,资源取得时机便是初始化时机)对象,它们在构造函数
中获得资源并在析构函数中释放资源。
13.2 两个常被使用的RAII class分别是tr1::shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。
若选择auto_ptr,复制动作会使它(被复制物)指向null。
13.3 auto_ptr的替代方案是“引用计数型智慧指针,reference-counting smart pointer,RCSP”,其持续追踪共有多少对象指向
某笔资源,并在无人指向它时自动删除该资源。但RCSP无法打破环状引用(cycles of reference),如两个其实已经被使用的对
象彼此互指,因而好像还处在“被使用”状态。
13.4 CInvestment *pInv = CreateInvestment();
std::auto_ptr<CInvestment> pInv1(pInv); //pInv1指向PInv
std::auto_ptr<CInvestment> Pinv2(pInv1); //pInv2指向pInv,pInv1指向NULL
pInv1 = pInv2; //pInv1指向PInv,pInv2指向NULL
std::tr1::shared_ptr<CInvestment> pInv3(pInv); //pInv3指向pInv
std::tr1::shared_ptr<CInvestment> pInv4(pInv3); //pInv3和pInv4指向同一对象pInv
pInv3 = pInv4; //pInv3和PInv4指向同一对象