Am I right in thinking that when a signal is connected to a closure created by boost::bind, then the closure should be destructed when the connection is closed ? I am having trouble because I pass a boost::shared_ptr in the closure. The use count does not drop when the signal connection is closed (the signal is connected to a one-shot slot which closes the connection). As a result the shared_ptr never deletes its data causing a memory leak. I have seen a few mentions of bugs in signals2 with respect to object destruction on connection termination. Perhaps I have fallen foul of that. It seems quite a serious bug though considering the general standard of boost. Given that the one-shot slot receives the shared_ptr I am considering a hack to fix the problem - explicitly break into the shared_ptr and decrement the reference count that I believe should be decremented by conn.disconnect(). Is there a better way ?