Информация об изменениях

Сообщение Re: освобождение памяти в callback от 06.03.2019 11:01

Изменено 06.03.2019 14:57 B0FEE664

Re: освобождение памяти в callback
Здравствуйте, Hard_Club, Вы писали:

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


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

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

[сcode]
std::shared_ptr<MyObject> pObj = ...

g_map[pObj.get()] = pObj;
LibApiFunction(pObj.get());
[/сcode]

в callback удалять из мапа:
SomeCallback(MyObject* ptr)
{
  g_map.erase(ptr);
}
Re: освобождение памяти в callback
Здравствуйте, 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);
}