Para obter uma void *
função de um CI, seria algo assim (exemplo muito básico):
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
Como obtenho o mesmo resultado ao usar std::unique_ptr<>
?
c++
c
unique-ptr
ZeppRock
fonte
fonte
malloc
em C ++ como este. Você está retornando um ponteiro para a memória bruta, na qual precisa colocar novos objetos antes de poder usá-lo. Se você não tiver um bom motivo para criar os objetos mais tarde do que quando estiver alocando memória, deverá usarnew
ou ostd::make_unique
que alocará memória e criar objetos apropriados. Em ambos os casosstd::vector
comreserve
é prov. melhor também. Mesmo que você não os use,operator new
é a maneira idiomática de alocar memória, nãomalloc
.Respostas:
Você precisa especificar deleter personalizado para usar
void
comounique_ptr
argumento de tipo assim:fonte
Uma simplificação da resposta do @ RealFresh usando
std::free
diretamente como deleter em vez de construir um functor:Veja meu comentário sobre a questão, no entanto.
fonte
Considere retornar um ponteiro para char-array:
fonte