我经常在一些内部表中使用以下原始元素。
X const * find(Key const& key);
如果找不到找到返回找到元素的指针,则返回null。
我想用shared_ptr而不是裸指针做类似的事情。
答案 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。