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まだ構築されていないため、解放は処理されません。
これは見落としですか?または、私が気付かなかった解決策はありますか?