代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
class Player
{
public:
int score;
int age;
static char* pool;
Player(int _score, int _age): score(_score), age(_age) {}
static bool initPool()
{
pool = (char*)malloc(18);
if (pool == 0) return false;
cout << "内存池申请成功!!!" << endl;
return true;
}
static void freePool()
{
if (pool == 0) return ;
free(pool);
cout << "内存池释放成功!!!" << endl;
}
void* operator new(size_t size)
{
if (pool[0] == 0)
{
pool[0] = 1;
cout << "内存池中第一块内存分配成功!!!" << endl;
return pool + 1;
}
if (pool[9] == 0)
{
pool[9] = 1;
cout << "内存池中第二块内存分配成功!!!" << endl;
return pool + 10;
}
void* ptr = (void*)malloc(size);
cout << "向系统申请一块内存!!!" << endl;
return ptr;
}
void operator delete(void* ptr)
{
if (ptr == 0) return ;
if (ptr == pool + 1)
{
pool[0] = 0;
cout << "内存池中第一块内存释放成功!!!" << endl;
return ;
}
if (ptr == pool + 10)
{
pool[9] = 0;
cout << "内存池中第二块内存释放成功!!!" << endl;
return ;
}
free(ptr);
cout << "系统内存释放成功!!!" << endl;
}
};
char* Player::pool = 0;
int main()
{
Player::initPool();
Player* p1 = new Player(39, 15);
Player* p2 = new Player(59, 67);
Player* p3 = new Player(93, 45);
delete p2;
Player* p4 = new Player(47, 18);
delete p1;
delete p3;
delete p4;
Player::freePool();
return 0;
}
控制台输出
内存池申请成功!!!
内存池中第一块内存分配成功!!!
内存池中第二块内存分配成功!!!
向系统申请一块内存!!!
内存池中第二块内存释放成功!!!
内存池中第二块内存分配成功!!!
内存池中第一块内存释放成功!!!
系统内存释放成功!!!
内存池中第二块内存释放成功!!!
内存池释放成功!!!