设为首页 加入收藏

TOP

3.1.2 智能指针
2013-10-07 13:13:40 来源: 作者: 【 】 浏览:57
Tags:3.1.2 智能 指针

3.1.2  智能指针

智能指针(smart pointer)是C++(www.cppentry.com)群体中热门的议题,围绕它有很多有价值的讨论和结论。它实践了推荐书目[1]中的代理模式,代理了原始"裸"指针的行为,为它添加了更多更有用的特性。

C++(www.cppentry.com)引入异常机制后,智能指针由一种技巧升级为一种非常重要的技术,因为如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时--不管是正常流程离开或是因异常离开--总调用delete来析构在堆上动态分配的对象。

存在很多种智能指针,其中最有名的应该是C++(www.cppentry.com)98标准中的"自动指针"std::auto_ptr,它部分地解决了获取资源自动释放的问题,例如:

  1. int main()  
  2. {  
  3.     auto_ptr< class_need_resource > p1(new class_need_resource);  
  4.     auto_ptr<demo_class> p2(factory.create());  
  5.     ...  
  6. }                                       //离开作用域,p1、p2自
    动析构从而释放内存等资源 

auto_ptr的构造函数接受new操作符或者对象工厂创建出的对象指针作为参数,从而代理了原始指针。虽然它是一个对象,但因为重载了operator*和opreator->,其行为非常类似指针,可以把它用在大多数普通指针可用的地方。当退出作用域时(离开函数main()或者发生异常),C++(www.cppentry.com)语言会保证auto_ptr对象销毁,调用auto_ptr的析构函数,进而使用delete操作符删除原始指针释放资源。

auto_ptr很好用,被包含在C++(www.cppentry.com)标准库中令它在世界范围内被广泛使用,使智能指针的思想、用法深入人心。但标准库并没有覆盖智能指针的全部领域,尤其是最重要的引用计数型智能指针。

boost.smart_ptr库是对C++(www.cppentry.com)98标准的一个绝佳补充。它提供了六种智能指针,包括scoped_ptr、scoped_array、shared_ptr、shared_array,weak_ptr和intrusive_ ptr,从各个方面来增强std::auto_ptr,而且是异常安全的。库中的两个类--shared_ptr和weak_ptr已被收入到C++(www.cppentry.com)新标准的TR1库中。

接下来的部分将详细介绍scoped_ptr、scoped_array、shared_ptr和shared_ array,简要介绍另两个组件weak_ptr和intrusive_ptr。它们都是很轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。

这些智能指针都位于名字空间boost,为了使用smart_ptr组件,需要包含头文件<boost/smart_ptr.hpp>,即:

  1. #include <boost/smart_ptr.hpp> 
  2. using namespace boost; 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.2.2 操作函数 下一篇3.2.1 类摘要

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: