c语言智能指针是什么,关于c ++:Boost智能指针和std智能指针有什么区别?

所以,我想使用智能指针而不是原始的,几乎SO上的每个主题都说Boost库。 但是std有std::auto_ptr和std::shared_ptr之类的东西。

为什么要提升? 有什么不同?

这个问题不是关于实现的差异,而是关于使用Boost指针的原因。 我想,给出答案,包括回答日期和背景,是相当有用的。 它有助于理解如何将Boost指针添加到std。

std :: auto_ptr已弃用btw

C ++ 11中新的智能指针,如std::shared_ptr等(std::auto_ptr除外),是在Boost中具有相同名称的结构之后建模的。

检查您提到的那些SO项目的日期。 去年仅在标准中引入了几个boost智能指针,例如boost::shared_ptr(因此成为std::shared_ptr)。

可能重复不同风格的shared_ptr之间的差异

基本上Boost先做shared_ptr。您可能会注意到C ++ 11中的许??多新容器类很久以前就在Boost中。我希望这种模式能够继续下一次修订C ++标准。 Boost支持那些不讨论C ++ 11的旧C ++编译器,这是一个很大的好处。

顺便说一下,在C ++ 11中不推荐使用std::auto_ptr,它会引入std::shared_ptr和std::unique_ptr,这两者都非常有用。

更具体地说:Boost是一个图书馆游乐场,供作者探索设计空间并用真实用户验证他们的库。 C ++委员会(其中包括许多此类作者)然后进入并标准化了有效的方法。

也可以看看:

boost :: shared_ptr和标准文件中的std :: shared_ptr之间的区别[StackOverflow]

不同风格的shared_ptr [StackOverflow]之间的差异

那么,std::shared_ptr和boost:shared_ptr都是引用计数指针。相反,std :: auto_ptr的工作方式非常不同。 std::shared_ptr和boost:shared_ptr之间的差异非常小,主要是历史性的。在C ++ 11之前,没有std::shared_ptr且只有boost:shared_ptr。设计C ++ 11时,他们将boost:shared_ptr作为模型。

您提到的所有智能指针都有一个共同点,就是它们有自己的机制来确保点的生命周期管理正确完成。 auto_ptr的工作原理是,如果您有多个auto_ptr的实例,那么其中只有一个包含指向真实对象的指针。每当您从另一个auto_ptr创建auto_ptr时,新的auto_ptr将指向该对象,旧的指向NULL。另一方面,使用shared_ptr,可以有多个shared_ptr个实例共享同一个对象,只有当最后一个超出范围时,才会删除该对象。

在C ++ 11中有一个与std::auto_ptr类似的指针类型,即std::unique_ptr,但是有一些重要的区别,另见

std :: auto_ptr到std :: unique_ptr。

参考文献:

http://www.cplusplus.com/reference/std/memory/auto_ptr/

http://en.cppreference.com/w/cpp/memory/shared_ptr

http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm

http://en.cppreference.com/w/cpp/memory/unique_ptr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值