Чтобы получить функцию void *
из CI, нужно сделать что-то вроде этого (очень простой пример):
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
Как добиться того же результата при использовании std::unique_ptr<>
?
c++
c
unique-ptr
ZeppRock
источник
источник
malloc
в C ++, как это. Вы возвращаете указатель на необработанную память, в которую вам нужно поместить новые объекты, прежде чем вы сможете использовать их. Если у вас нет веской причины для создания объектов в более позднее время, чем когда вы выделяете память, вам следует использоватьnew
илиstd::make_unique
который выделит память, а также создать соответствующие объекты. В любом случаеstd::vector
сreserve
являются пробы. лучше тоже. Даже если вы их не используете,operator new
это идиоматический способ распределения памяти, а неmalloc
.Ответы:
Вам необходимо указать пользовательское средство удаления, чтобы использовать в
void
качествеunique_ptr
аргумента типа вот так:источник
Упрощение ответа @ RealFresh, использующего
std::free
непосредственно в качестве средства удаления вместо создания функтора:Смотрите мой комментарий по этому вопросу.
источник
Попробуйте вместо этого вернуть указатель на массив символов:
источник