//模板类型参数ElementType指定了要分配的元素类型,该实例不能再用于分配其它类型的对象
template<typename ElementType>
class object_pool:protected pool
{
public:
object_pool();
~object_pool();

//malloc和free并不会调用类的构造函数和析构函数
element_type *malloc();
void free(element_type *p);
bool is_from(element_type *p)const;

//construct()实际上是一组函数,它先调用malloc()分配内存,然后再在内存块上使用传入的参数
//调用类的构造函数,返回一个已经初始化的对象指针
element_type * construct(...);
//先调用对象的析构函数,然后再用free()释放内存块
void destroy(element_type *p);
};



用法

#include<boost/pool/object_pool.hpp>
#include<iostream>
#include<cassert>
#include<string>
using namespace boost;
using namespace std;

class demo_class
{
public:
int a,b,c;
demo_class(int x=1,int y=2,int z=3):a(x),b(y),c(z){}
};
int main()
{
object_pool<demo_class> p1;
demo_class *p = p1.malloc();
assert(p1.is_from(p));
//这个时候居然还没有初始化
cout << p->a << endl;//137028012乱七八糟的数据

p = p1.construct(4,5,6);
cout << p->a << endl;//4

object_pool<string> ps;
for(int i=0;i<10;++i){
string *s = ps.construct("abcd");
cout << *s << endl;
}

//也可以构造普通数据类型
object_pool<int> pi;
int *i = pi.construct(3);
cout << *i << endl;
}