Почему сигнал QObject уничтожен вызывается ПОСЛЕ уничтожения?

Рассмотрим этот тестовый пример:

class MyObject : public QObject
{
    Q_OBJECT
public:
    MyObject() { qDebug() << "MyObject constructor"; }
    virtual ~MyObject() { qDebug() << "MyObject destructor"; }
};

class Tracker : public QObject
{
    Q_OBJECT
public:
    Tracker() {}

public slots:
    void onDestructor() { qDebug() << "About to be destroyed!"; }
};

int main(int argc, char** argv)
{
    QCoreApplication app(argc, argv);

    Tracker tracker;

    MyObject *obj = new MyObject();
    QObject::connect(obj, SIGNAL(destroyed()), &tracker, SLOT(onDestructor()));
    delete obj;

    return app.exec();
}

Он печатает следующее:

MyObject constructor
MyObject destructor
About to be destroyed!

Такое поведение противоречит документации Qt: " Этот сигнал испускается непосредственно перед объект obj уничтожается и не может быть заблокирован ». Почему это происходит?

11
задан lamefun 30 December 2011 в 19:48
поделиться