Myers 想用下面的代码表达什么。
std::tr1::shared_ptr<Investment> createInvestment()
{
std::tr1::shared_ptr<Investment> retVal(static_cast<Investment*>(0),
getRidOfInvestment);
... // make retVal point to the
// correct object
return retVal;
}
为什么将0传递给retVal,然后如何在返回之前将指针传递给retVal。
0 被传输,因为 真实对象尚未创建,如果无法创建,则返回指向空指针的 shared_ptr。例如赋值:
这个例子展示了自动“清理”的思想。createInvestment 函数创建一个“投资”(实体)。但是你不能忘记“关闭”它(删除,完成)。只要用户(程序员)保留返回的智能指针,投资对象就存在。当指针超出范围时,将自动调用“完成”函数。