首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

返回栈空间的智能指针的不解,该怎么处理

2012-03-26 
返回栈空间的智能指针的不解请教大家一个问题,在50诫的18条看到一个例子:std::tr1::shared_ptrInvestment

返回栈空间的智能指针的不解
请教大家一个问题,在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

热点排行