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;
}

  运行结果:

你可能感兴趣的:(template)