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

原创 2012年03月21日 18:16:53

总结:

内存管理是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时需要仔细地评估可能带来的影响。

版权声明:转载时请标注来自于"AJIOY的专栏"

相关文章推荐

MAC地址全球唯一为什么还可以修改

首先我们要声明的是我们认识的“MAC地址的更改”不是更改网卡中的MAC,而是更改ARP缓存表中的MAC地址。     上面我们看到arp -s 10.10.0.8 00-00-00-00...

boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等

一、使用同步定时器 这个示例程序通过展示如何在一个定时器执行一个阻塞等待介绍ASIO。 ...

cocos2dx-内存管理剖析(智能指针的局限与引用计数的选择)

一、常用内存管理计数 1、智能指针 cocos的内存管理没有用智能指针,智能指针,c++有相应的类型,代码如下: #include using namespace std; class Obj{...

webkit内存管理1:智能指针

转载请注明出处:http://blog.csdn.net/awebkit 对于 c/c++ 开发来说,内存管理是一个头疼的问题。那么, WebKit 是如何来管理内存的呢? 首先,...
  • awebkit
  • awebkit
  • 2013年05月09日 17:30
  • 3342

内存管理之常用智能指针的用法和注意事项

我们向系统申请资源,使用完之后必须要还给系统。c++中最常使用的资源就是动态分配的内存,你不使用的时候一定要归还给系统,不然就会出现内存泄露。我们一般会选择去手动释放资源,delete 掉申请的内存。...

内存管理与智能指针

内存管理与智能指针           作为一名合格的C++程序猿,管理内存是不可逃避的现实。像java,python等这些面向对象的语言来说,它们有垃圾回收机制,不需要程序员来管理内存。然而为了追求...

谈C++内存管理与智能指针

谈及C/C++令人头疼的就是指针和内存管理了,可怕的内存泄漏,繁琐的内存管理。好在C98提供了标准支持了C++的一个模板类auto_ptr,还有C++11对auto_ptr的摒弃,以及boost库提供...

动态内存管理与智能指针

C、 C++中编译内存分配://一个 C、 C++程序编译时内存分为 4大存储区:栈区、堆区、数据段、程序代码段。 代码段: 又称为常量区,储存常量和编译之后的代码指令 数据段: 又称为静...

内存管理-智能指针

问题引出:c++继承了c那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄漏,悬挂指针,越界访问等问题,比如以下代码:int *p = new int; ... if(xxx) goto...

【C++】动态内存管理(四)智能指针(std)

智能指针总结 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了“operator->”操作符,直接...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[内存管理]智能指针与内存池的总结
举报原因:
原因补充:

(最多只允许输入30个字)