写一个定长内存池!
#pragma once
#include <iostream>
using std::cout;
using std::endl;
template<class T>
class ObjectPool {
public:
T* New() {
T* obj = nullptr;
if (_freeList) {
void* next = *(void**)_freeList;
obj = _freeList;
freeList = next;
new (obj)T;
return obj;
}
if (residualSize < sizeof(T)) {
residualSize = 128 * 1024;
_memory = malloc(residualSize);
if (_memory == nullptr) {
throw std::bad_alloc();
}
}
obj = (T*)_memory;
size_t obj_size = sizeof(T) > sizeof(void*) ? sizeof(T) : sizeof(void*);
_memory += obj_size;
residualSize -= obj_size();
new (obj)T;
return obj;
}
void Delete(T* obj) {
obj->~T();
*(void**)obj = _freeList;
_freeList = obj;
}
private:
char* _memory = nullptr;
void* _freeList = nullptr;
size_t residualSize = 0;
};