2016-11-01 11 views
1

私はそのコンストラクタで共有ポインタを受け取り、それを弱ポインタ​​に格納するクラスを持っていますが、この変換をどのように(そしてどこで)行うべきかはわかりません。shared_ptrを受け取るクラスコンストラクタでweak_ptrをどのように初期化する必要がありますか?

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

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

shared_ptrをコンストラクタに渡す前に変換する必要がありますか?

予想通り、このA(std::shared_ptr<B> Bptr) : m_Bptr(Bptr) { }作品のように、初期化リストをweak_ptrからshared_ptrを渡すか、私は明示的にコンストラクタの体内で変換する必要がありますか?

+2

コンストラクタの実行中にオブジェクトをアクティブに保つ必要がありますか?なぜあなたは 'shared_ptr'を参照渡ししていませんか? –

+0

@DavidSchwartz私はこれに焦点を当てていませんでしたが、私はそれを参考にしてはならない理由はありません。ヘッドアップをありがとう! –

答えて

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

weak_ptrのコンストラクタは、引数としてshared_ptrを取ります。だから、shared_ptrを渡すだけでうまくいきます。 cppreferenceから

はrで管理対象オブジェクトを共有する新しいのweak_ptrを構築します。 r がオブジェクトを管理していない場合、*これもオブジェクトを管理しません。

関連する問題