auto_ptr的替代方案是“引用计数型智慧指针(RCSP)”,所谓RCSP也是智能指针,持续追踪共有多少对象指向某笔资源,并在无人指向它时自动删除该资源。
RCSP无法打开环状引用(如两个其实已经没被使用的对象彼此互指,因而好像还处在“被使用”状态)。
tr1::shared_ptr<Investment> pInv(createInvestment());//调用factory函数
//使用pInv一如以往。
//经由shared_ptr析构函数自动删除pInv。
void f()
{
std::tr1::shared_ptr<Investment> pInv1(createInvestment()); //pInv1指向createInvestment返回物。
pInv2(pInv1);//pInv1和pInv2指向同一个对象
pInv1=pInv2;//同上,无任何改变
}
auto_ptr和tr1::shared_ptr两者都在其析构函数内做delete而不是delete[]动作,意味着在动态分配而得的array身上使用auto_ptr或者tr1::shared_ptr是个馊主意。