pool对象内存池(object_pool)

//模板类型参数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;
}

你可能感兴趣的:(C++,c,C#)