Boost のmake_shared()
関数は、shared_ptr
.
make_scoped()
同等のものがないのはなぜですか?一般的なベストプラクティスはありますか?
これは、私にとって安全ではないと思われるboost::scoped_ptr
ドキュメントのコード例です。
boost::scoped_ptr<Shoe> x(new Shoe);
このコード行は、次の 3 つのことを順番に実行します。
- にヒープメモリを割り当てます
Shoe
- のコンストラクターを呼び出します
Shoe
- のコンストラクターを呼び出します
boost::scoped_ptr<Shoe>
コンストラクターがShoe
例外をスローすると、 メモリ リークが発生します。 (R. Martinho Fernandes の回答を参照)scoped_ptr
まだ構築されていないため、解放は処理されません。
これは見落としですか?または、私が気付かなかった解決策はありますか?