3.9 singleton_pool

singleton_pool与pool的接口完全一致,可以用它分配简单数据类型(POD)的内存指针,但它是一个“单件”。

singleton_pool位于名字空间boost,需要包含的头文件如下:

singleton_pool默认使用boost.thread库提供线程安全保证,所以需要将它链接boost_thread库,如果不使用多线程,那么可以在头文件前定义宏BOOST_POOL_NO_MT。

3.9.1 类摘要

singleton_pool的类摘要如下:

3.9.2 用法

singleton_pool主要有两个模板参数(其余的可以使用默认值):第一个参数Tag仅仅用于标记不同的单件,可以是空类,甚至可以只进行声明(此形式还被用于4.7节的boost.exception);第二个参数RequestedSize等同于pool构造函数中的整数requested_size,可以指示pool分配的内存块的大小。

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

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

在使用singleton_pool时最好使用typedef来简化其名称,否则会使类型名过于冗长而难以使用,具体如下。

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