#include <iostream> template <typename T> class FreeList{ public: FreeList(bool flag = false) { this->flag = flag; this->next = NULL; } void* operator new(size_t t) { if (freeList->next == NULL) { initPool(5); } FreeList* temp = freeList->next; if (temp == rear) { rear = freeList; } freeList->next = temp->next; temp->next = NULL; return temp; } void* operator new(size_t t, bool f ) { if (f == true) { return ::operator new(t); } } void operator delete(void* ptr, std::string f){ if (ptr != NULL) { std::cout << f<< std::endl; rear->next = (FreeList*)ptr; rear = rear->next; } } static void initPool(size_t t = 1) { if (t > 0) { for (int i = 0; i < t; ++i) { std::cout << "正在初始化第: "<<i<<" 个对象"<<std::endl; FreeList* temp = new(true)FreeList(); rear->next = temp; rear = temp; } } } ~FreeList(){ if (!flag) { operator delete((FreeList*)this,"回收用完的节点到对象池"); } else { FreeList* p = this; int i = 1; while(p) { FreeList* temp = p->next; ::operator delete(p); std::cout <<"清空了第"<<i++<<"个内存"<<std::endl; p = temp; } if (p ==NULL) { std::cout << "内存清理完毕" << std::endl; } } } //private: bool flag = false; FreeList* next = NULL; static FreeList<T>* freeList; static FreeList<T>* rear; }; template <typename T> FreeList<T>* FreeList<T>::freeList = new (true)FreeList<T>(true) ; template <typename T> FreeList<T>* FreeList<T>::rear = FreeList<T>::freeList; int main () { FreeList<int >::initPool(); FreeList<int >* temp = new FreeList<int>(); FreeList<int >* temp1 = new FreeList<int>(); temp->~FreeList(); temp1->~FreeList(); FreeList<int>::freeList->~FreeList(); std:: cout<<"end"<<std::endl; }
对象池的完全实现
最新推荐文章于 2024-10-16 16:16:15 发布