gpt4 book ai didi

c++ - Shared_ptr 和 unique_ptr 有异常(exception)

转载 作者:太空狗 更新时间:2023-10-29 20:22:56 24 4
gpt4 key购买 nike

来自 en.cppreference.com

Typical uses of std::unique_ptr include:

  • providing exception safety toclasses and functions that handle objects with dynamic lifetime, byguaranteeing deletion on both normal exit and exit through exception

  • passing ownership of uniquely-owned objects with dynamic lifetime intofunctions

  • acquiring ownership of uniquely-owned objects with dynamic lifetimefrom functions

  • as the element type in move-aware containers, such as std::vector,which hold pointers to dynamically-allocated objects (e.g. ifpolymorphic behavior is desired)

我对第一点感兴趣。

在 cppreference.com 中没有提到 shared_ptr。我找不到抛出异常时 shared_ptr 不会被删除的场景。有人可以解释一下是否存在这种可能性吗?

最佳答案

让我们看一下 std::unique_ptr 如何用于提供异常安全的示例:

someclass *ptr = new someclass;
...
delete ptr; // in case of exception we have problem

所以我们应该使用:

std::unique_ptr<someclass> ptr = std::make_unique<someclass>();
... // no problem

简单、安全且无开销。

那么 shared_ptr 可以用同样的方式来提供异常安全吗?是的,它可以。但它不应该,因为它是为不同的目的而设计的,并且会产生不必要的开销。所以它没有被提及作为这种情况的工具,但这并不意味着如果它是唯一的所有者它就不会删除拥有的对象。

关于c++ - Shared_ptr 和 unique_ptr 有异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35585569/

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