14
コードは正しいですか?unique_ptrにnullptr値を設定する必要がありますか?
unique_ptr<A> p(new A());
p = nullptr;
私は*のunique_ptrをしてnullptrを使用する必要がありますか?それとも失敗するでしょうか?
私はそれを試してみるg ++しかし、他のコンパイラはどうですか?
コードは正しいですか?unique_ptrにnullptr値を設定する必要がありますか?
unique_ptr<A> p(new A());
p = nullptr;
私は*のunique_ptrをしてnullptrを使用する必要がありますか?それとも失敗するでしょうか?
私はそれを試してみるg ++しかし、他のコンパイラはどうですか?
となります。段落クラステンプレートについての標準C++ 11の20.7.1.2.3/8-9から
:
unique_ptr& operator=(nullptr_t) noexcept
。効果:
reset()
。事後条件:
get() == nullptr
これは、クラステンプレートの定義は、その右手側として(例えばnullptr
など)タイプnullptr_t
の値を受け取りoperator =
のオーバーロードを含むことを意味します。この段落では、unique_ptr
にnullptr
を割り当てることは、unique_ptr
をリセットすることと同じであることも示しています。
したがって、この割り当て後、A
オブジェクトは破棄されます。
です。ところで、nullptrにはnullptr_tしかありません。 – Zhen
@ Zhen:標準ではこれを指定していません。 'nullptr_t'型の変数を作成することもできますが、これを行う必要はないでしょう。 –