3 に答える
バージョン 1.53 以降、Boost::shared_ptr は std::nullptr_t からのコンストラクターをサポートします。
これは、boost::shared_ptr の代わりに std::shared_ptr で動作すると思います
http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm#Membersによるとboost::shared_ptr
、null ポインター定数で初期化することはできません。これは、ポインターを取るコンストラクターの場合、Y*
where Y
isによってテンプレート化されるためです。テンプレート パラメータ。への null ポインター定数の変換は、Y*
推論時に考慮されないY*
ため、コンストラクターは推論に失敗し、渡すときに無視されnullptr
ます。
でもオーバーロードstd::shared_ptr
があるので許容できるstd::nullptr_t
ので、必要に応じて切り替えることができます。
nullptr
渡すことは、 のような null ポインターを渡すこととは異なることに注意してください(T*)nullptr
。後者はconstexpr
コンストラクターを使用しませんが、前者は (他の違いの中でも) 使用します。したがって、前者の場合、ポインターが名前空間スコープ変数である場合、定数の初期化が行われ、他の翻訳単位の名前空間スコープ オブジェクトとの初期化競合が発生しません。