设为首页 加入收藏

TOP

3.11.2 用法
2013-10-07 13:14:21 来源: 作者: 【 】 浏览:60
Tags:3.11.2 用法

3.11.2  用法

singleton_pool主要有两个模板类型参数(其余的可以使用缺省值)。第一个Tag仅仅是用于标记不同的单件,可以是空类,甚至是声明(这个用法还被用于boost.exception,参见4.9小节,136页)。第二个参数RequestedSize等同于pool构造函数中的整数requested_ size,指示pool分配内存块的大小。

singleton_pool的接口与pool完全一致,但成员函数均是静态的,因此不需要声明singleton_pool的实例 ,直接用域操作符::来调用静态成员函数。因为singleton_pool是单件,所以它的生命周期与整个程序同样长,除非手动调用release_memory()或purge_memory(),否则singleton_pool不会自动释放所占用的内存。除了这两点,singleton_pool的用法与pool完全相同。

下面的代码示范了singleton_pool的用法:

  1. #include <boost/pool/singleton_pool.hpp>  
  2. using namespace boost;  
  3. struct pool_tag{};                                  //仅仅用于标记的空类  
  4. typedef singleton_pool<pool_tag, sizeof(int)> spl;  //内存池定义  
  5. int main()  
  6. {  
  7.     int *p = (int *)spl::malloc();                      //分配一
    个整数内存块
     
  8.     assert(spl::is_from(p));  
  9.     spl::release_memory();                              //释放所
    有未被分配的内存
     
  10. }                                                       //spl的
    内存直到程序结束才完                                                    
    //全释放,而不是退出作用域
     

singleton_pool在使用时最好使用typedef来简化名称,否则会使得类型名过于冗长而难以使用。如代码中所示:

  1. typedef singleton_pool<pool_tag, sizeof(int)> spl; 

用于标记的类pool_tag可以再进行简化,直接在模板参数列表中声明tag类,这样可以在一条语句中完成对singleton_pool的类型定义,例如:

  1. typedef singleton_pool<struct pool_tag, sizeof(int)> spl; 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.11.1 类摘要 下一篇3.12 pool_alloc

评论

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