返回栈空间的智能指针的不解,该怎么处理
返回栈空间的智能指针的不解
请教大家一个问题,在50诫的18条看到一个例子:
std::tr1::shared_ptr<Investment> createInvestment()
{
std::tr1::shared_ptr<Investment> retVal(static_cast<Investment*>(0), getRidOfInvestment);
retVal = ... ; // make retVal point to the
// correct object
return retVal;
}
函数体结束的时候智能指针的析构函数会被调用,即调用getRidOfInvestment这个函数。
如果getRidOfInvestment里做了些清理工作,并且有且仅有retVal这个指针指向某种资源的时候,那在完成析构过程之后,retVal返回的岂不是一个悬空指针了? 这样做和返回栈的一般类型的指针有什么区别呢?
------解决方案--------------------
智能指针是一个对象,它只是表现得像一个普通指针而已。也就是说,return retVal;仅仅是返回了一个对象,你可以想象成它返回一个string类或者vector类的对象。
------解决方案--------------------
在什么时候被copy的呢?
return retVal;在这里被copy
请教大家一个问题,在50诫的18条看到一个例子:
std::tr1::shared_ptr<Investment> createInvestment()
{
std::tr1::shared_ptr<Investment> retVal(static_cast<Investment*>(0), getRidOfInvestment);
retVal = ... ; // make retVal point to the
// correct object
return retVal;
}
函数体结束的时候智能指针的析构函数会被调用,即调用getRidOfInvestment这个函数。
如果getRidOfInvestment里做了些清理工作,并且有且仅有retVal这个指针指向某种资源的时候,那在完成析构过程之后,retVal返回的岂不是一个悬空指针了? 这样做和返回栈的一般类型的指针有什么区别呢?
------解决方案--------------------
智能指针是一个对象,它只是表现得像一个普通指针而已。也就是说,return retVal;仅仅是返回了一个对象,你可以想象成它返回一个string类或者vector类的对象。
------解决方案--------------------
在什么时候被copy的呢?
return retVal;在这里被copy