#include template class FixedAllocator { PageAllocator* page_allocator_; std::uint64_t page_size; std::stack pools; public: explicit FixedAllocator(std::uint64_t page_size) { this->page_allocator_ = new PageAllocator(sizeof(Tp) *page_size); this->page_size = page_size; } Tp* Allocate() { if (pools.empty()) { Tp* temp = \ reinterpret_cast(this->page_allocator_->Allocate()); for (size_t i = 0; i < this->page_size; i++) { this->pools.push(&temp[i]); } delete temp; auto res = this->pools.top(); this->pools.pop(); return res; } else { auto res = this->pools.top(); this->pools.pop(); return res; } } void Deallocate(Tp* p) { delete p; this->pools.push(p); } const PageAllocator& InnerAllocator() const noexcept { return *page_allocator_; } };