Как лучше сделать так, что бы один объект знал об удалении второго и подчищал все что с ним связано.
class CViewToModelLink : public QObject
{
CRailObject * frailObject;
public:
void setRailObject(CRailObject * RailObject);
private slots:
void destroyRailObjectHandler();
};
void CViewToModelLink::setRailObject(CRailObject *RailObject)
{
if(frailObject!=RailObject)
{
if(frailObject)
disconnect(frailObject,SIGNAL(destroyed()),this,SLOT(destroyRailObjectHandler()));
frailObject = RailObject;
if(frailObject)
connect(frailObject,SIGNAL(destroyed()),this,SLOT(destroyRailObjectHandler()));
}
}
void CViewToModelLink::destroyRailObjectHandler()
{
CRailObject * railObject = qobject_cast<CRailObject*>(sender()); //<<на момент удаления в sender() есть указатель на QObject, но на CRailObject он не кастится
qDebug("remove %s object from link",qPrintable(railObject->objectName())); //соответсвенно тут вылет
frailObject = NULL;
}
Суть в том, что раньше руками везде я указывал при удалении объекта railObject для объекта CViewToModelLink стереть указатель на него. Решил переделать на сигнал/слоты.
И вот при сигнале destroyed() при удалении railObject я не могу узнать какой объект удалился. точнее я не могу его привести с нужному типу. Или на момент посылки сигнала destroyed() все деструкторы вызваны, и преобразования к наследуемому типу уже невозможно?