Obtenir un à void *
partir d'une fonction dans CI ferait quelque chose comme ça (exemple très basique):
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
Comment obtenir le même résultat lors de l'utilisation std::unique_ptr<>
?
c++
c
unique-ptr
ZeppRock
la source
la source
malloc
en C ++ comme ceci. Vous retournez un pointeur vers la mémoire brute, dans lequel vous devez placer de nouveaux objets avant de pouvoir l'utiliser. Si vous n'avez pas une bonne raison de créer les objets plus tard que lorsque vous allouez de la mémoire, vous devez utilisernew
oustd::make_unique
qui allouera de la mémoire, ainsi que créer des objets appropriés. Dans les deux cas,std::vector
avecreserve
prob. mieux aussi. Même si vous ne les utilisez pas,operator new
c'est la façon idiomatique d'allouer de la mémoire, nonmalloc
.Réponses:
Vous devez spécifier un suppresseur personnalisé afin de l'utiliser
void
commeunique_ptr
argument de type comme celui-ci:la source
Une simplification de la réponse de @ RealFresh en utilisant
std::free
directement comme deleter au lieu de construire un foncteur:Voir mon commentaire sur la question, cependant.
la source
Envisagez de renvoyer un pointeur vers char-array à la place:
la source