对象池的完全实现

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值