我正在尝试使用std::unique_ptr<T[]>
自定义内存分配器。基本上,我有一个是IAllocator
,它提供了以下方法子类自定义的分配:std :: unique_ptr <T[]>和自定义分配器删除器
void* Alloc(size_t size)
template<typename T> T* AllocArray(size_t count)
void Free(void* mem)
template<typename T> void FreeArray(T* arr, size_t count)
由于底层存储可能来自预先分配的块,我需要的特殊...Array()
- 方法分配和释放阵列,他们分配/释放内存,并在范围内的每个元素上调用T()
/~T()
。 现在,据我所知,自定义删除器为std::unique_ptr
使用的签名:
void operator()(T* ptr) const
在unique_ptr<T[]>
的情况下,通常你会打电话delete[]
并用它做的,但我要叫FreeArray<T>
,为此,我需要范围内的元素数量。鉴于只有原始指针,我认为没有获得范围的大小的方式,所以我能想出的唯一事情是这样的:
std::unique_ptr<T[], MyArrDeleter> somePtr(allocator.AllocArray<T>(20), MyArrDeleter(allocator, 20));
其中基本数组的大小将被传递手动删除对象。有一个更好的方法吗?这似乎很容易出错...