From en.cppreference.com http://en.cppreference.com/w/cpp/memory/unique_ptr
std::unique_ptr 的典型用途包括:
-
提供异常安全
处理具有动态生命周期的对象的类和函数,通过
保证正常退出和异常退出时删除
-
将具有动态生命周期的唯一拥有的对象的所有权传递给
功能
-
获取具有动态生命周期的唯一拥有对象的所有权
从函数
-
作为移动感知容器中的元素类型,例如 std::vector,
它保存指向动态分配对象的指针(例如,如果
需要多态行为)
我对第一点感兴趣。
没有提到shared_ptr
在 cppreference.com 中。
我无法找到抛出异常时共享指针不会被删除的场景。有人可以解释一下是否存在这种可能性吗?
让我们看一下示例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
简单、安全且无开销。
So can shared_ptr
使用相同的方式来提供异常安全?是的,它可以。但它不应该,因为它是为不同的目的而设计的,并且会产生不必要的开销。因此,它没有被提及作为此类情况的工具,但这并不意味着如果它是唯一所有者,它不会删除拥有的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)