您的位置:首页 > 编程语言 > C语言/C++

C++通过list和template实现简单的对象池

2012-02-19 00:37 316 查看


远链接:http://www.cnblogs.com/lynch_world/archive/2011/07/21/2113244.html


C++通过list和template实现简单的对象池

通过重载new和delete实现简单的对象池,此处只是一个示例代码,并没有对对象上限个数进行限制及回收等操作

一个简单的实现【编辑环境:linux+vi,编译环境:g++】:

C++语言:

#include <list>

#include <iostream>

using namespace std;

template<class T>

class object_pool

{

list<void *> data_list;

public:

void* malloc_data()

{

if(!data_list.empty())

{

list<void *>::iterator it = data_list.begin();

void *p = *it;

data_list.pop_front();

return p;

}

else

{

void* p = malloc(sizeof(T));

return p;

}

}

void free_data(void* p)

{

data_list.push_back(p);

}

};

class A

{

public:

int value;

A(int a):value(a){cout<<"A("<<a<<")
called"<<endl;}

~A() {cout<<"~A("<<value<<")
called"<<endl;}

static object_pool<A> pool_;

void* operator new (size_t size)

{

return pool_.malloc_data();

}

void operator delete(void* p)

{

pool_.free_data(p);

}

};

object_pool<A> A::pool_;

void main()

{

A* a1=new A(1);

   A* a2=new A(2);

delete a1;

delete a2;

}

  运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: