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

总结:

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

你可能感兴趣的:(工作,object,vector,delete,扩展,程序开发)