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 все еще действует.

Другие вопросы по тегам