В этот раз сам разобраться не смог....
написал небольшой пример использования сигналов и слотов....
в нём создаются элементы, и каждый последующий следит за преведущим, если последний созданный элемент удалить, то по цепочке удаляться все остальные
#include <boost/signal.hpp>
#include <boost/bind.hpp>
#include <iostream>
int count = 0;
//===============================класс в котором возникает событие==========
class ObJEcT//: public boost::signals::trackable
{
public:
ObJEcT()
{
count++;
}
ObJEcT(ObJEcT *obj)
{
count++;
this->connectOnDestroy(boost::bind(&ObJEcT::destroy, obj));
}
~ObJEcT()
{
count--;
std::cout << "~ " << count<< std::endl;
onDestroy(); //при удаление сообшяем всем кто слушает
}
void destroy()
{
delete this;
}
//возрашяет ссылку на сигнал.. для отмены если чё..
void connectOnDestroy(boost::function<void()> slot)
{
onDestroy.connect(slot);
}
private:
boost::signal<void (void)> onDestroy;
};
int main()
{
ObJEcT *tmp = new ObJEcT();
for (int i = 0; i < 232; i++) // 232 отрабатывает нормально если выше то програма вылетает
{
tmp = new ObJEcT(tmp);
}
delete tmp;
system("pause");
return 0;
}
при количестве объектов меньше 233 всё работает нормально, если свыше то программа вылетает ссылаясь на какой-то асемблеровский файл chkstk.asm
с чем это связано???)