Сообщение Re: освобождение памяти в callback от 06.03.2019 11:01
Изменено 06.03.2019 14:57 B0FEE664
Re: освобождение памяти в callback
Здравствуйте, Hard_Club, Вы писали:
H_C>Что делать есть либа требует передачи в функцию raw поинтера и освобождения его в callback — никак его в smart pointer не завернешь.
В предположении однопоточности либы:
Построить глобальный мап, типа:
перед передачей указателя в либу делать:
[сcode]
std::shared_ptr<MyObject> pObj = ...
g_map[pObj.get()] = pObj;
LibApiFunction(pObj.get());
[/сcode]
в callback удалять из мапа:
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 не завернешь.
В предположении однопоточности либы:
Построить глобальный мап, типа:
перед передачей указателя в либу делать:
в callback удалять из мапа:
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);
}