C++ shared_ptr std::bind и std::function
У меня есть следующее:
учебный класс B
слушает boost::signal2
класса C
и при срабатывании выполнит обратный вызов, заданный классом A
и это выполняет метод в классе A
A
, B
а также C
, D
являются все std::shared_ptr
,
Проблема в том, что когда класс D
освобождает указатель на класс B
, B
не удаляется из-за обработчика сигнала. Даже если я позвоню отключить на boost::connection
У меня та же проблема.
Любая идея, как я могу это исправить?
1 ответ
Так что проблема была из-за shared_ptr
цикл.
Учебный класс A
переходил в класс B
std::function
который держит shared_ptr
к классу A
так класс A
никогда не удалялся.
например. B.route(std::bind(&A::myFunc, shared_from_this()));
Я исправил это с помощью лямбда-функции и weak_ptr в классе A
:
std::weak_ptr<A> wp = shared_from_this();
A.route(std::bind([wp]() {
auto p = wp.lock();
if(wp)
wp->myFunc();
}));
Таким образом, моя функция myFunc
вызывается только если A все еще действует.