C++对象池技术剖析

对象池就是一定数量已经创建好的对象的集合。

可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的malloc/free操作,在一定程度上提高了系统的性能,尤其在动态内存分配比较频繁的程序中效果尤其明显。

对象池的特征:

1、对象池中有一定数量创建好的对象。

2、对象池向用户提供获取对象的接口和归还对象的接口。

下面是参考网上的资料写的实现代码:

#include<list>

#include<iostream>

using namespace std;



template<class T>

class ObjectPool

{

	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 Object{

public:

	int value;

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

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



	static ObjectPool<Object> pool_;

	void *operator new(size_t size)

	{

		return pool_.malloc_data();

	}

	void operator delete(void *p)

	{

		pool_.free_data(p);

	}

};

测试程序:

ObjectPool<Object> Object::pool_;

int _tmain(int argc, _TCHAR* argv[])

{

	Object* o1=new Object(1);

	Object* o2=new Object(2);

	delete o1;

	delete o2;



	return 0;

}

上述代码,实现了一个简单的对象池,更深入的解释会在后续代码中实现。

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