Dostać void *
z funkcji w CI, zrobiłbym coś takiego (bardzo prosty przykład):
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
Jak osiągnąć ten sam rezultat podczas używania std::unique_ptr<>
?
c++
c
unique-ptr
ZeppRock
źródło
źródło
malloc
w C ++ w ten sposób. Zwracasz wskaźnik do surowej pamięci, w której musisz umieścić nowe obiekty, zanim będziesz mógł z nich korzystać. Jeśli nie masz dobrego powodu, aby utworzyć obiekty w późniejszym czasie niż przy przydzielaniu pamięci, powinieneś użyćnew
lub,std::make_unique
który przydzieli pamięć, a także utworzyć odpowiednie obiekty. W obu przypadkachstd::vector
zereserve
jest prob. też lepiej. Nawet jeśli ich nie używasz,operator new
to idiomatyczny sposób alokacji pamięcimalloc
.Odpowiedzi:
Aby użyć, musisz określić niestandardowy usuwacz
void
jakounique_ptr
„s typu argumentu tak:źródło
Uproszczenie odpowiedzi @ RealFresh przy użyciu
std::free
bezpośrednio jako separatora zamiast konstruowania funktora:Zobacz jednak mój komentarz do pytania.
źródło
Zastanów się nad zwróceniem wskaźnika do tablicy znaków:
źródło