关闭

[内存管理]智能指针与内存池的总结

标签: object程序开发vectordelete工作扩展
2092人阅读 评论(0) 收藏 举报
分类:

总结:

内存管理是C++程序开发中永恒的话题,因为没有垃圾回收机制,小心谨慎地管理内存等系统资源是每一个C++开发人员都必须面对面的问题。

boost.smart_ptr库提供了数种新型智能指针,弥补了std::auto_ptr的不足,可以有效地消除new和delete的显示使用,减少甚至杜绝代码资源泄漏。

scoped_ptr是smart_ptr库中最容易学习和使用的一个,它的行为与auto_ptr相似,但所有权明确,清晰地表明了这种智能指针只能在声明的作用域中使用,不能转让,任何对它的复制操作都会失败。这个特点地代码的后期维护工作非常有用。

 shared_ptr可能是最有用的智能指针,也是这些智能指针中最“智能”的一个,不仅能管理内存,还可以管理其他系统资源,能够应用于许多场合。它可以自动地计算指针的引用计数,其行为最接近原始指针。几乎可以在任何可以使用原始指针的地方使用shared_ptr,并且不用承担资源泄漏的风险。shared_ptr不仅可以保存指针,通过配置删除器也可以自动释放指针关联的资源。

除了基本的用法之外,还应该了解pimpl惯用法、应用于工厂模式。持有任意对象的指针等,这些用法进一步展示了它的强大功能。为了方便shared_ptr的使用,smart_ptr库还提供了工厂函数make)shared(),进一步消除了代码中new操作符的使用。

scoped_array和shared_array是scoped_ptr和shared_ptr对动态数组的扩展,它们为动态数组提供了可自动删除的代理,shared_array比scoped_array有更多的用途,但更应该使用vector和shared_ptr<vector<> >,除非程序对性能有非常苛刻的要求。

weak_ptr能够“静态”地观察shared_ptr而不影响引用计数。

pool库是boost程序库在内存管理方面提供的另一个有用工具,它使用了高效的内存池,用于管理内存资源。pool库提供了pool、object_pool、singleteon_pool和pool_alloc 四种形式的内存池,适合于各种情形的应用。可以完全把它们当成是一个小型的垃圾回收机制, 在内存池中随意地动态创建对象,而完全不用关心它的回收,也不用对原有类做任何形式的修改。

object_pool可以统一地管理对象的创建与销毁,能够很好地应用在各种规模的面对对象软件系统中,至于 pool_alloc,它是符合C++标准的一个内存分配器实现,快速且高效,但通常STL自带的分配器会更好地配合工作。使用pool_alloc时需要仔细地评估可能带来的影响。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:484779次
    • 积分:5408
    • 等级:
    • 排名:第5135名
    • 原创:113篇
    • 转载:46篇
    • 译文:2篇
    • 评论:117条
    最新评论