Um void *
eine Funktion von einer Funktion in CI zu erhalten, gehen Sie wie folgt vor (sehr einfaches Beispiel):
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
Wie erreiche ich das gleiche Ergebnis bei der Verwendung std::unique_ptr<>
?
c++
c
unique-ptr
ZeppRock
quelle
quelle
malloc
C ++ wie dieses zu verwenden. Sie geben einen Zeiger auf den Rohspeicher zurück, in den Sie neue Objekte einfügen müssen, bevor Sie ihn verwenden dürfen. Wenn Sie keinen guten Grund haben, die Objekte zu einem späteren Zeitpunkt als beim Zuweisen von Speicher zu erstellen, sollten Sie verwendennew
oder verwendenstd::make_unique
, um Speicher zuzuweisen, und geeignete Objekte erstellen. In beiden Fällen iststd::vector
mitreserve
prob. besser auch. Auch wenn Sie diese nicht verwenden,operator new
ist dies die idiomatische Art, Speicher zuzuweisen, nichtmalloc
.Antworten:
Sie müssen einen benutzerdefinierten Löscher angeben, um Folgendes
void
als Typargument verwenden zu könnenunique_ptr
:quelle
Eine Vereinfachung der Antwort von @ RealFresh, die
std::free
direkt als Deleter verwendet wird, anstatt einen Funktor zu erstellen :Siehe jedoch meinen Kommentar zu der Frage.
quelle
Ziehen Sie stattdessen einen Zeiger auf char-array zurück:
quelle