2013-02-25 12 views
14

コードは正しいですか?unique_ptrにnullptr値を設定する必要がありますか?

unique_ptr<A> p(new A()); 
p = nullptr; 

私は*のunique_ptrをしてnullptrを使用する必要がありますか?それとも失敗するでしょうか?

私はそれを試してみるg ++しかし、他のコンパイラはどうですか?

答えて

26

となります。段落​​クラステンプレートについての標準C++ 11の20.7.1.2.3/8-9から

unique_ptr& operator=(nullptr_t) noexcept

効果reset()

事後条件get() == nullptr

これは、クラステンプレート​​の定義は、その右手側として(例えばnullptrなど)タイプnullptr_tの値を受け取りoperator =のオーバーロードを含むことを意味します。この段落では、unique_ptrnullptrを割り当てることは、unique_ptrをリセットすることと同じであることも示しています。

したがって、この割り当て後、Aオブジェクトは破棄されます。

+0

です。ところで、nullptrにはnullptr_tしかありません。 – Zhen

+1

@ Zhen:標準ではこれを指定していません。 'nullptr_t'型の変数を作成することもできますが、これを行う必要はないでしょう。 –

関連する問題