class Message
{
public:
Message(MessagePool* pool)
:m_pool(pool)
{
}
~Message()
{
}
public:
void destroy()
{
//消息回收 进入池子
if (m_pool != NULL)
{
m_pool->push(this);
}
else
{
delete this;
}
}
public:
int proc;
int content;
private:
MessagePool* m_pool; //每个消息对应一个池子对象,这个池子是产生它以及死亡后放进去的地方
};
class MessagePool
{
public:
MessagePool(unsigned int initCount, unsigned int maxcount);//池子初始长度,最大长度(不能让他因为异常无限大,超过这个值不进池子)
~MessagePool();
public:
Message* pop();
void push(Message* m);
private:
//对象池 的核心实体池子 一个存储对象的队列safequeue(typedef SafeQueue<Message*> MessageList;)
MessageList m_pool;
unsigned int m_initcount;
unsigned int m_maxcount;
};
MessagePool::MessagePool(unsigned int initCount, unsigned int maxcount)
:m_initcount(initCount), m_maxcount(maxcount)
{
for (unsigned int i = 0; i < initCount; i++)
{
Message* m = new Message(this);
m_pool.push(m);
}
}
MessagePool::~MessagePool()
{
Message* m = NULL;
while ((m = m_pool.pop()) != NULL)
{
delete m;
m = NULL;
}
}
Message* MessagePool::pop()
{
Message* m = m_pool.pop();
if (m == NULL)
{
//池子里面没有了 就new
m = new Message(this);
}
return m;
}
void MessagePool::push(Message* m)
{
if (m != NULL)
{
if (m_pool.ssize() >= static_cast<int>(m_maxcount))
{
//大了就删掉 不回收了
delete m;
m = NULL;
}
else
{
m_pool.push(m);
}
}
}
//Message* msg = new Message();
//delete msg;
//对象的产生于销毁,有了消息池,改为如下
MessagePool m_messagePool(0,2000);//所有消息的池子 这里面存储消息尸体 负责消息的重生于死亡
Message* msg = m_messagePool.pop();
msg->destroy();