Re: освобождение памяти в callback
От: B0FEE664  
Дата: 06.03.19 11:01
Оценка: +2
Здравствуйте, Hard_Club, Вы писали:

H_C>Что делать есть либа требует передачи в функцию raw поинтера и освобождения его в callback — никак его в smart pointer не завернешь.


В предположении однопоточности либы:
Построить глобальный мап, типа:
std::map<T*, std::shared_ptr<T> g_map;

перед передачей указателя в либу делать:

std::shared_ptr<MyObject> pObj = ...

g_map[pObj.get()] = pObj;
LibApiFunction(pObj.get());


в callback удалять из мапа:
SomeCallback(MyObject* ptr)
{
  g_map.erase(ptr);
}
И каждый день — без права на ошибку...
Отредактировано 06.03.2019 14:57 B0FEE664 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.