//Tag仅仅是用于标记不同的单件,可以是空类,甚至是声明
//第二个参数RequestedSize等同于pool构造函数中的整数requested_size,指示分配内存块的大小
template<typename Tag,unsigned RequestedSize>
class singleton_pool
{
public:
static bool is_from(void * ptr);
static void * malloc();
static void * ordered_malloc();
static void * ordered_malloc(size_type n);

static void free(void * ptr);
static void ordered_free(void * ptr);
static void free(void *ptr,std::size_t n);
static void ordered_free(void *ptr,size_type n);

static bool release_memory();
static bool purge_memory();
};



用法:

#include<boost/pool/singleton_pool.hpp>
#include<boost/pool/pool_alloc.hpp>
#include<iostream>
#include<vector>
using namespace boost;
using namespace std;

class poolTag{};

typedef singleton_pool<poolTag,sizeof(int)> pl;

/*
pool_alloc提供了两个可以用于标准容器模板参数的内存分配器,分别是
pool_alloc和fast_pool_alloc,它的行为与pool,object_pool...
的一点不同是:当内存分配失败后会抛出std::bad_alloc异常,需要包含
<boost/pool/pool_alloc.hpp>
*/
int main()
{
int *p = (int *)pl::malloc();
pl::release_memory();
cout << *p << endl;

//使用pool_allocator代替标准容器默认的内存分配器
//vector将使用新的分配器良好工作
vector<int,pool_allocator<int> >v;
v.push_back(10);
cout << v.size() << endl;
}