#include template class FixedAllocator { PageAllocator* page_allocator_; public: explicit FixedAllocator(std::uint64_t size_page) { size_page = size_page; page_allocator_ = new PageAllocator(sizeof(Tp) * size_page); } Tp* Allocate() { if (_free_pool.empty()) { Tp* next = dynamic_cast(page_allocator_->Allocate()); for (uint i = 0; i < size_page; ++i) { _free_pool.emplace_back(&next[i]); } } auto rval = _free_pool.back(); _free_pool.pop_back(); return rval; } void Deallocate(Tp* p) { _free_pool.emplace_back(p); } const PageAllocator& InnerAllocator() const noexcept { return *page_allocator_; } ~FixedAllocator() { delete (page_allocator_); } private: std::uint64_t size_page; std::vector _free_pool; };