Boost.smart_ptr智能指针

智能指针

介绍

智能指针是存储指向动态分配 (堆) 对象指针的对象。他们的表现就像内置 c + + 指针,只是他们在适当的时候自动删除指向的对象。智能指针是异常特别有用,因为他们确保恰当地摧毁的动态分配的对象。他们也可以用来跟踪由多个拥有者共享的动态分配的对象。

从概念上讲,智能指针被视为拥有指针,并因此负责删除的对象,当它不再需要的对象。

智能指针库提供六个智能指针类模板︰

scoped_ptr < boost/scoped_ptr.hpp >           简单的单个对象的唯一所有权。Noncopyable。
scoped_array < boost/scoped_array.hpp >       简单的唯一所有权的数组。Noncopyable。
shared_ptr < boost/shared_ptr.hpp >            在多个指针之间共享的对象所有权。
shared_array < boost/shared_array.hpp >      共享多个指针的数组所有权。
weak_ptr < boost/weak_ptr.hpp >             非拥有观察员的shared_ptr所拥有的对象.

intrusive_ptr       < boost/intrusive_ptr.hpp >        同一个嵌入式的引用计数对象的所有权。

这些模板用于补充std::auto_ptr模板。

他们列举了"资源获得即初始化"的成语,Bjarne Stroustrup"c + + 编程语言",第三版,第 14.4 节,所述的资源管理。

此外,智能指针图书馆提供高效率的工厂函数创建智能指针对象︰

make_shared, allocate_shared for objects <boost/make_shared.hpp> Efficient creation of shared_ptr objects.
make_shared, allocate_shared for arrays <boost/make_shared.hpp> Efficient creation of shared_ptr arrays.
make_unique                                                   <boost/make_unique.hpp> Creation of unique_ptr objects and arrays.

智能指针编程技术的网页列出了shared_ptr和weak_ptr一些高级的应用.

通用要求

这些智能指针类模板有模板参数T,指定了智能指针所指向的对象的类型。如果对象类型T的析构函数或运算符delete引发的异常,智能指针模板的行为是未定义的。

在智能指针声明的时候,T可能是不完整的类型。除非另外指定,智能指针实例化的的时候,它需要T是一个完整类型。实现是类型的需要诊断 (视为错误) 所有违反这项规定,包括删除不完整。请参阅checked_delete函数模板的说明。

请注意, shared_ptr并没有这种限制,因为它的大部分成员功能并不需要T要完整的类型。

基本原理

对T的要求都是经过精心策划的安全最大化但允许杆体 (也称为 pimpl) 和类似的成语。这些习语中智能指针可能出现在翻译单位其中T是不完整的类型。这界面分开执行和隐藏从翻译单位,只是使用接口的实现。为特定的智能指针文档中描述的例子说明这些成语中的智能指针使用。

请注意, scoped_ptr要求,在销毁时 T是一个完整的类型,但shared_ptr没有这个要求。

异常安全性

这些智能指针类中的几个函数指定为具有"无影响"或"没有影响除了这样那样"如果则会引发异常。这意味着,当异常是由其中一个类的对象,整个程序状态依然是前导致所引发异常的函数调用。这等于保证有没有探测到的副作用。其他功能永远不会引发异常。唯一的例外过函数引发的哪个做抛出异常 (假设T满足常见的要求) 是std::bad_alloc,和只引发明确记载作为可能投掷std::bad_alloc的功能.
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值