I have the following:
class B listens to a boost::signal2 of class C and when triggered will execute a callback given by class A and that executes a method in class A
A, B and C, D are all std::shared_ptr.
The problem is that when class D releases the pointer to class B, B is not being deleted because of the signal handler. Even if I call disconnect on the boost::connection I have the same problem.
Any Idea how I can fix that ?
So the problem was due to a shared_ptr cycle.
Class A was passing to class B an std::function that holds a shared_ptr to class A, so class A was never being deleted.
eg. B.route(std::bind(&A::myFunc, shared_from_this()));
I fixed it with a lambda function and a weak_ptr in class A:
std::weak_ptr<A> wp = shared_from_this();
A.route(std::bind([wp]() {
auto p = wp.lock();
if(wp)
wp->myFunc();
}));
That way my function myFunc is only called if A is still valid.