在Effective C++ item 17 中,有一个函数调用可能泄漏的例子:
processWidget (std::tr1::shared_ptr<Widget> ( new Widget ), priority ());
根据这本书,如果第一次创建新的小部件,就会发生泄漏。然后优先级被调用,但它抛出了,在这种情况下,共享指针从未被创建并且新的 Widget 被泄露。
据我了解,这样的电话不会泄漏:
processWidget (std::tr1::shared_ptr<Widget> ( new Widget ));
但是在这种情况下,如果 new Widget 抛出了怎么办,为什么没有内存泄漏呢?或者是唯一安全的方法(如果是这样,那有什么不同?)
auto w = std::tr1::shared_ptr<Widget> ( new Widget );
processWidget ( w );