将std :: weak_ptr传递给函数是否有用?

Ign*_*ant 6 c++ smart-pointers c++11

我读这篇文章由Herb萨特关于通过智能函数指针.他没有提到std::weak_ptr,老实说,我找不到一个好的方案,传递这样的智能指针是有用的.

该功能是否拥有所有权?通过std::shared_ptr.该函数是否只需要对底层对象进行操作?传递原始指针或引用.

所以传递std::weak_ptr给100%无用的功能?

Dre*_*ann 9

所以传递std::weak_ptr给100%无用的功能?

没有.

考虑这个玩具示例.

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";
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

在此示例中,函数observe保持状态.

它的weak_ptr参数表明这个传递的指针不是拥有的,但保留了以后拥有的能力,安全地检测指针是否已经过期.

对于以后不保持状态的函数可以weak_ptr在多线程上下文中有用地接收参数,其中关联数据可能 在函数工作时到期.

  • 这个答案由 isocpp.org [正式认可](https://isocpp.org/blog/2018/12/quick-q-is-it-useful-to-pass-stdweak-ptr-to-functions)。(好的!) (2认同)