我是否可以使用C Boost shared_ptr进行编程,就像我在Java中编码一样,不关心内存管理?

前端之家收集整理的这篇文章主要介绍了我是否可以使用C Boost shared_ptr进行编程,就像我在Java中编码一样,不关心内存管理?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_1@我用C/C++编写了一段时间,现在我需要为我正在做的项目提高效率.

我从这个shared_ptr中理解的是它在我需要它时基本上删除了对象.所以,例如,如果我的对象有一个shared_ptr的向量,我不必担心迭代向量并删除析构函数中的每个元素?换句话说,只要我使用这些,我就不用担心内存管理了吗?或者我完全误解了这个?这听起来好得令人难以置信.

解决方法

您必须了解共享指针是使用引用计数实现的,这意味着如果指针图中有循环,则不会释放对象.也就是说,如果指向b和b的点指向a但没有指向a或b,那么a和b都不会被释放,因为它们都具有引用计数“1”.

Boost提供弱指针来解决这个问题,它允许您存储指向共享对象的指针,而不会增加其引用计数.弱指针提供了一层安全性,因为在释放共享指针后尝试取消引用指针将引发异常而不是使程序崩溃.

性能方面,共享指针也非常昂贵(至少与原始指针相比) – 但最好使用它们,然后在探查器识别出瓶颈而不是在任何地方使用它们时将其删除.

除此之外,是的,它们对于管理动态分配的对象非常有用.

编辑:另一个问题(在提升页面上提到)是为了避免“临时”的shared_pointers:

func(A(),boost::shared_ptr<B>(new B));

因为允许编译器将其优化为

tmp1 = new B;
tmp2 = A();
tmp3 = boost::shared_ptr<B>(tmp1)
func(tmp2,tmp3)

乍一看可能看起来不错,但是如果A()碰巧抛出一个异常,那么B已被分配,但是shared_ptr还没有得到它,所以指针永远不会被释放.

原文链接:https://www.f2er.com/c/116677.html

猜你在找的C&C++相关文章