如何在接收shared_ptr的类构造函数中初始化weak_ptr?

时间:2016-11-01 04:10:23

标签: c++ c++11 smart-pointers

我有一个类在其构造函数中接收共享指针并将其存储在弱指针中,但我不确定如何(以及在​​何处)执行此转换。

class A {
    public:
        A(std::shared_ptr<B> Bptr);

    private:
        std::weak_ptr<B> m_Bptr;
};

我应该在传递给构造函数之前转换shared_ptr吗?

通过像shared_ptr这样的初始化列表将weak_ptr传递给A(std::shared_ptr<B> Bptr) : m_Bptr(Bptr) { }是否按预期工作,或者我需要在构造函数的主体中显式转换?

1 个答案:

答案 0 :(得分:6)

template< class Y >
weak_ptr( const std::shared_ptr<Y>& r );

weak_ptr的构造函数以shared_ptr为参数。所以,是的,只需通过shared_ptr即可。

来自cppreference:

  

构造新的weak_ptr,它共享由r管理的对象。若r   不管理任何对象,*这也不管理任何对象。