2016-11-01 26 views
1

我有一個類在其構造函數中接收共享指針並將其存儲在弱指針中,但我不知道如何(以及在​​哪裏)執行此轉換。如何在接收shared_ptr的類構造函數中初始化weak_ptr?

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) { }按預期方式工作或我需要在構造函數的主體中顯式轉換?

+2

當構造函數運行時,是否需要保持對象存活?你爲什麼不通過引用傳遞'shared_ptr'? –

+0

@DavidSchwartz我沒有專注於此,但沒有理由不通過引用來傳遞它。感謝您的提醒! –

回答

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

weak_ptr一個構造需要shared_ptr作爲參數。所以,只是通過shared_ptr將工作。

從cppreference:

構建新的weak_ptr這股由R管理的對象。如果r 不管理對象,*這也不管理對象。

相關問題