C++为什么会有智能指针

一、内存管理

       内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄漏(memory leak)、“野”指针(wild pointer)、访问越界(accessdenied)等问题。曾几何时,C++程序员曾经无限地向往Java、C#等语言的垃圾回收机制。虽然C++标准提供了智能指针std: :auto_ ptr, 但并没有解决所有问题。
      阅读完,你会了解到高效的内存管理方法,彻底忘记“栈”(Stack)、“堆”(Heap)等内存分配相关的术语,并且还会发现,Boost 为C++提供的解决方案可能要比Java和C#等其他语言更好。

二、智能指针作用

        智能指针(smart pointer)是C++群体中热门的议题,围绕它有很多有价值的讨论和结论。它实践了推荐书目[1]中的代理模式,代理了原始“裸”指针的行为,为它添加了更多更有用的特性。
        C++引入异常机制后,智能指针由-种技巧升级为一种非常重要的技术,因为如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时一不管是正常流程离开或是因异常离开一总调用delete来析构在堆上动态分配的对象。
        存在很多种智能指针,其中最有名的应该是C++98标准中的“自动指针”std::auto_ ptr,它部分地解决了获取资源自动释放的问题,例如:

int main()
{
auto_ ptr< class_ need_ resource > p1 (new class_ need_ resource) ;
auto_ ptr <demo_ class> p2 (factory.create()) ;
}//离开作用域,p1、p2自动析构从而释放内存等资源

三、智能指针

        utoptr的构造函数接受new操作符或者对象工厂创建出的对象指针作为参数,从而代理了原始指针。虽然它是- -一个对象,但因为重载了operator*和 opreator->,其行为非常类似指针,可以把它用在大多数普通指针可用的地方。当退出作用域时(离开函数main()或者发生异常),C++语言会保证auto_ ptr对象销毁,调用auto_ ptr的析构函数,进而使用delete操作符删除原始指针释放资源。
        auto_ ptr很好用,被包含在C++标准库中令它在世界范围内被广泛使用,使智能指针的思想、用法深入人心。但标准库并没有覆盖智能指针的全部领域,尤其是最重要的引用计数型智能指针。
        boost.smart_ ptr 库是对C++98标准的-一个绝佳补充。它提供了六种智能指针,包括scoped_ ptr、 scoped array shared ptr、shared array, weak_ ptr 和intrusive_ptr,从各个方面来增强std: :auto_ _ptr, 而且是异常安全的。库中的两个类一-shared ptr和weak_ ptr 已被收入到C++新标准的TR1库中。
        接下来的部分将详细介绍scoped ptr、scoped_ array、shared ptr和sharedarray,简要介绍另两个组件weak_ ptr和intrusive_ ptr。它们都是很轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。
        这些智能指针都位于名字空间boost,为了使用smart_ _ptr 组件,需要包含头文件
<boost/smart_ ptr. hpp>,即:
#include <boost/ smart_ _ptr. hpp>
using namespace boost;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小气鬼944

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值