我正在阅读 this article由 Herb Sutter 撰写,关于将智能指针传递给函数。他没有提到 std::weak_ptr
,老实说,我找不到传递这种智能指针有用的好场景。
函数是否拥有所有权?传递 std::shared_ptr
。函数是否只需要对底层对象进行操作?传递原始指针或引用。
那么将 std::weak_ptr
传递给函数是否 100% 没用?
最佳答案
So is passing
std::weak_ptr
to functions 100% useless?
没有。
考虑这个玩具示例。
struct PointerObserver
{
std::weak_ptr<int> held_pointer;
void observe( std::weak_ptr<int> p )
{
held_pointer = std::move(p);
}
void report() const
{
if ( auto sp = held_pointer.lock() )
{
std::cout << "Pointer points to " << *sp << "\n";
}
else
{
std::cout << "Pointer has expired.\n";
}
}
};
在此示例中,成员函数 observe
保留传递给它的 weak_ptr
。这通常称为“接收器参数”。
此 weak_ptr
参数表示此传递的指针不拥有,但保留稍后拥有的能力,安全地检测指针是否已过期。
作为一个不同的例子,一个不保持状态供以后使用的函数也可以在多线程上下文中有用地接收一个weak_ptr
参数,其中关联的数据函数正在工作时可能会过期。
关于c++ - 将 std::weak_ptr 传递给函数有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53599103/