有効な C++項目 17 には、関数呼び出しがリークする可能性がある例があります。
processWidget (std::tr1::shared_ptr<Widget> ( new Widget ), priority ());
本によると、新しいウィジェットが最初に作成された場合にリークが発生します。次に優先度が呼び出されますが、スローされます。この場合、共有ポインターは作成されず、新しいウィジェットがリークされます。
私の理解では、このような呼び出しは漏れません:
processWidget (std::tr1::shared_ptr<Widget> ( new Widget ));
しかし、この場合、new Widget がスローすると、なぜメモリ リークがないのでしょうか? または、これを行う唯一の安全な方法です(もしそうなら、それはどう違うのですか?)
auto w = std::tr1::shared_ptr<Widget> ( new Widget );
processWidget ( w );