Вопрос новичка здесь: учитывая, что в C есть библиотека C со следующим предполагаемым использованием:
struct c_struct* c_obj = NULL;
func(&c_obj); //mallocs and fills c_struct
free_c_struct(c_obj); //my reponsibility to free it
Каким образом можно обернуть ее с помощью C ++ shared_ptr?Попробовал это так - delete (free_c_struct) не работает:
{
struct c_struct* c_obj = nullptr;
std::shared_ptr<struct c_struct> ptr (c_obj, free_c_struct);
//
// some amount of code
//
func(&c_obj);
//
// yet some amount of code, could return, or throw
// so I'm supposing "smart" functionality would do the work to free memory
//
//
//block ends, expect deleter to be called here
}
В конце блока nullptr передается free_c_struct, но я хочу передать malloc'ed адрес.Я что-то упускаю полностью?
Спасибо за ваше внимание.
ОБНОВЛЕНИЕ:
Какой-то сомнительный способ:
void deleter(struct c_struct** o) {
free_c_struct(*o);
}
{
struct c_struct* c_obj = nullptr;
std::shared_ptr<struct c_struct*> c_obj_ptr (&c_obj, deleter);
//
// some amount of code
//
func(&c_obj);
}
Кажется, это делает то, что я хочу, но выглядит странно, и я должен написать свое собственное средство удаления (что я бы предпочел не делать).