В моем коде я использую библиотеку с функцией store_pointer
, которая принимает void*
и сохраняет ее в памяти. Затем есть другая функция retrieve_pointer()
, которая возвращает мне void *
, у меня нет контроля над этой библиотекой, поэтому я не могу изменить поведение функции.
Теперь мне нужно передать переменнуюк этой функции и вернуть указатель, у меня есть код, настроенный следующим образом:
struct Task
{
int mId;
Task(int id ) :mId(id)
{
std::cout<<"Task::Constructor"<<std::endl;
}
~Task()
{
std::cout<<"Task::Destructor"<<std::endl;
}
};
std::unique_ptr<Task> taskPtr(new Task(23));
store_pointer(&taskPtr);
// do stuff that doesn't involve taskPtr
Task *new_taskPtr = reinterpret_cast<Task *>(retrieve_pointer());
// do stuff with new_taskPtr pointer
Сейчас все это работает, но мне интересно, нужно ли удалять указатель *new_taskPtr
или reinterpret_cast
«восстанавливает» указатель на unique_ptr
, поэтому память будет автоматически удаляться при выходе из области видимости / завершении программы.