#pragma once #include template using TReboundAllocator = typename std::allocator_traits::template rebind_alloc; class IAllocator { public: struct TBlock { void* Data; size_t Len; }; virtual ~IAllocator() = default; virtual TBlock Allocate(size_t len) = 0; virtual void Release(const TBlock& block) = 0; }; class TDefaultAllocator: public IAllocator { public: TBlock Allocate(size_t len) override; void Release(const TBlock& block) override; static IAllocator* Instance() noexcept; };