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
malloc
en 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 usarnew
ostd::make_unique
que asignará memoria, así como crear objetos apropiados. En cualquier casostd::vector
conreserve
es prob. mejor también Incluso si no usa estos,operator new
es la forma idiomática de asignar memoria, nomalloc
.Respuestas:
Debe especificar un eliminador personalizado para usarlo
void
comounique_ptr
argumento de tipo de esta manera:fuente
Una simplificación de la respuesta de @ RealFresh usando
std::free
directamente 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