boost内存池技术可以解决内存碎片等问题,下面是一个重载类中new和delete的方法,也方便自己记录一下
#include <boost/pool/singleton_pool.hpp>
#include <iostream>
using namespace std;
namespace common {
template<class T>
class cMemoryPool {
public:
struct pool_tag {
};
public:
void* operator new(size_t size) {
typedef boost::singleton_pool< pool_tag, sizeof(T)> m_pool;
cout<<"size=="<<sizeof(T)<<endl;
return m_pool::malloc();
}
void operator delete(void *ptr) {
typedef boost::singleton_pool< pool_tag, sizeof(T)> m_pool;
if(m_pool::is_from(ptr))
{
cout<<"free it "<<endl;
m_pool::free(ptr);
}
else
{
free(ptr);
}
}
};
}
class Base : public common::cMemoryPool<Base>
{
public:
Base() {m_a = 0;}
void print() {
cout << "print Base" << m_a << endl;
}
private:
int m_a;
};
int main()
{
Base *base_ = new Base();
base_->print();
delete base_;
}