gpt4 book ai didi

c++ - 当堆分配的构造函数参数抛出 C++

转载 作者:行者123 更新时间:2023-11-28 07:18:05 25 4
gpt4 key购买 nike

Effective C++第 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 );

最佳答案

如果 new Widget 抛出,那么内存将自动释放(如果它已经分配完毕);所以第二个例子没问题。

但是,无论如何使用make_shared 是个好主意,因为它通过为对象和引用计数分配一个 block 来更有效地使用内存。

关于c++ - 当堆分配的构造函数参数抛出 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com