#ifndef LIB_MEMPOOL_HPP_
#define LIB_MEMPOOL_HPP_
#include <boost/pool/object_pool.hpp>
template <typename ObjType>
class MemPool {
public:
virtual ~MemPool() { }
public:
void* operator new(std::size_t n);
void operator delete(void* p, std::size_t n);
private:
/*! memory pool for Object */
static boost::object_pool<ObjType> s_obj_pool_;
};
template <typename ObjType>
boost::object_pool<ObjType> MemPool<ObjType>::s_obj_pool_;
#include <cstdio>
template <typename ObjType>
inline void*
MemPool<ObjType>::operator new(std::size_t n)
{
void* p = s_obj_pool_.malloc();
if (p) {
return p;
}
//不需要s_obj_pool_.construct(); 思考new的重载方法!new的深入分析
throw std::bad_alloc();
}
template <typename ObjType>
inline void
MemPool<ObjType>::operator delete(void* p, std::size_t n)
{
s_obj_pool_.free(reinterpret_cast<ObjType*>(p));
}
//------------------------------------------------------------------------
// Some Utilities to Ease Your Life
//------------------------------------------------------------------------
#define USING_MEMPOOL_OPERATORS(type_) /
using MemPool<type_>::operator new; /
using MemPool<type_>::operator delete
#endif // LIB_MEMPOOL_HPP_
使用实例:
#include "mempool.hpp"
using namespace std;
class A : public MemPool<A> {
public:
int a;
int b;
};
class B : public A, public MemPool<B> {
public:
USING_MEMPOOL_OPERATORS(B);//思考为什么?using关键字 图文例解C++类的多重继承与虚拟继承
int c;
int d;
};
int main()
{
A* a = new A;
delete a;
A* b = new B;
delete b;
return 0;
}