Para obtener un void *de una función en CI haría algo como esto (ejemplo muy básico):
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
¿Cómo logro el mismo resultado cuando lo uso std::unique_ptr<>?
c++
c
unique-ptr
ZeppRock
fuente
fuente

mallocen C ++ como este. Está devolviendo un puntero a la memoria sin procesar, en la que necesita colocar objetos nuevos antes de poder usarlo. Si no tiene una buena razón para crear los objetos más tarde que cuando está asignando memoria, entonces debe usarnewostd::make_uniqueque asignará memoria, así como crear objetos apropiados. En cualquier casostd::vectorconreservees prob. mejor también Incluso si no usa estos,operator newes la forma idiomática de asignar memoria, nomalloc.Respuestas:
Debe especificar un eliminador personalizado para usarlo
voidcomounique_ptrargumento de tipo de esta manera:fuente
Una simplificación de la respuesta de @ RealFresh usando
std::freedirectamente como eliminador en lugar de construir un functor:Sin embargo, vea mi comentario sobre la pregunta.
fuente
Considere devolver un puntero a char-array en su lugar:
fuente