使用shared_ptr找到/未找到指示

时间:2014-10-30 03:13:30

标签: c++ shared-ptr

我经常在一些内部表中使用以下原始元素。

X const * find(Key const& key);

如果找不到找到返回找到元素的指针,则返回null。

我想用shared_ptr而不是裸指针做类似的事情。

2 个答案:

答案 0 :(得分:3)

没问题,它或多或少地以同样的方式工作。 shared_ptr有一个默认的构造函数,它生成一个“null”指针,它还有一个运算符,可以让你在布尔上下文中评估shared_ptr,就像if一样。所以当你没有任何回报时,只需说:

return shared_ptr<X>();

并测试它:

if (shared_ptr<X> ptr = myFunc()) {
  // do something with *ptr
}

答案 1 :(得分:0)

我不知道为什么你坚持要求返回shared_ptr? shared_ptr是用于管理内存的工具。您可以在功能中使用这些。但是,无论是否返回shared_ptr,引用/原始指针,函数的调用者都不会有任何不同。(在异步上下文中,存在许多陷阱)。

此外,shared_ptr是基于引用计数机制,即只有在任何人不再引用它们时才会删除它们。所以,如果你要归还它,你必须确保你没有永久存储它,这永远不会使它的参考计数达到0。