Предположим, мы подсоединили boost::signal к слоту, затем удалили слот (точнее, его функтор), затем просигналили. Чтобы правильно обрабатывалось удаление слота, функтор слота нужно унаследовать от boost::signals::trackable. Это работает если тип возврата у сигнала void. А если не void, то при попытке посылки сигнала в удаленный слот программа падает. Кто-нибудь знает как тут быть? (VS2008, версия boost 39)
class Receiver : public boost::signals::trackable
{...
public:
int Slot( int i1, int i2 ) {...}
};
...
Receiver *receiver = new Receiver;
boost::signal<int(int, int)> sig;
sig.connect( boost::bind( &Receiver::Slot, receiver, _1, _2 ) );
sig(1, 2); // fire — ok
delete receiver;
sig(1, 2); // crash