1
4

3 に答える 3

3

バージョン 1.53 以降、Boost::shared_ptr は std::nullptr_t からのコンストラクターをサポートします。

于 2012-12-15T16:27:08.523 に答える
2

これは、boost::shared_ptr の代わりに std::shared_ptr で動作すると思います

于 2012-12-09T11:55:57.993 に答える
2

http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm#Membersによるとboost::shared_ptr、null ポインター定数で初期化することはできません。これは、ポインターを取るコンストラクターの場合、Y*where Yisによってテンプレート化されるためです。テンプレート パラメータ。への null ポインター定数の変換は、Y*推論時に考慮されないY*ため、コンストラクターは推論に失敗し、渡すときに無視されnullptrます。

でもオーバーロードstd::shared_ptrがあるので許容できるstd::nullptr_tので、必要に応じて切り替えることができます。

nullptr渡すことは、 のような null ポインターを渡すこととは異なることに注意してください(T*)nullptr。後者はconstexprコンストラクターを使用しませんが、前者は (他の違いの中でも) 使用します。したがって、前者の場合、ポインターが名前空間スコープ変数である場合、定数の初期化が行われ、他の翻訳単位の名前空間スコープ オブジェクトとの初期化競合が発生しません。

于 2012-12-09T11:56:21.630 に答える