このように初期化する場合unique_ptr
:
std::unique_ptr<Foo> i;
i.reset( new Foo() );
しかし、から例外がスローされますFoo::Foo()
。問題は、割り当てられたメモリはどうなるのかということです。unique_ptrはどのようにしてリークを回避しますか?new
これはオペレーター内で処理されるものですか?
スコープが終了すると、デストラクタが確実に呼び出されます。reset
呼び出しは戻るまで呼び出されないため、例外がコンストラクターを離れるときに割り当てられたメモリを解放することnew Foo()
により、これを処理する必要があるようです。new
それはどうなりますか?