std :: unique_ptr <T []> e deletador de alocador personalizado

Estou tentando usarstd::unique_ptr<T[]> com alocadores de memória personalizados. Basicamente, tenho alocadores personalizados que são subclasses deIAllocator, que fornece os seguintes métodos:

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 )

Como a memória subjacente pode vir de um bloco pré-alocado, eu preciso do...Array()-métodos para alocar e liberar matrizes, eles alocam / liberam memória e chamamT() / ~T() em todos os elementos do intervalo. Agora, tanto quanto eu sei, deleters personalizados parastd::unique_ptr use a assinatura:

void operator()(T* ptr) const

No caso deunique_ptr<T[]>normalmente você chamariadelete[] e acabar com isso, mas eu tenho que ligarFreeArray<T>, para o qual preciso do número de elementos no intervalo. Dado apenas o ponteiro bruto, acho que não há como obter o tamanho do intervalo, portanto, a única coisa que eu poderia fazer é:

std::unique_ptr<T[], MyArrDeleter> somePtr( allocator.AllocArray<T>( 20 ), MyArrDeleter( allocator, 20 ) );

Onde essencialmente o tamanho da matriz deve ser passado para o objeto deleter manualmente. Existe uma maneira melhor de fazer isso? Isso me parece bastante propenso a erros ...

questionAnswers(2)

yourAnswerToTheQuestion