標準のshared_ptr と比較した std::make_shared の効率を理解するには、建設プロセスを段階的に見てみましょうstep.
標準のshared_ptrコンストラクターの使用:
std::shared_ptr<Object> p2(new Object("foo"));
std::make_shared:
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
標準のshared_ptrコンストラクターアプローチでは、オブジェクトの構築中に例外がスローされた場合、クリーンアップは実行されず、未解決のメモリが残ります。ただし、std::make_shared は、構築されたオブジェクトと制御ブロックが単一の割り当ての一部であり、例外がスローされた場合にクリーンアップされることを保証します。
以上が「make_shared」と「shared_ptr」: One More が効率的で例外安全なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。