Я спрашиваю себя, является ли следующий код безопасным:
#include <QCoreApplication>
#include <QObject>
#include <QDebug>
#include <QTimer>
class Base : public QObject
{
Q_OBJECT
public:
Base()
{
// is it safe to do that ?
connect(this, SIGNAL(signal1()), this, SLOT(slot1()));
}
virtual ~Base() {}
signals:
void signal1();
public slots:
virtual void slot1() = 0; // could be only virtual
};
class Derived : public Base
{
Q_OBJECT
public slots:
virtual void slot1()
{
qDebug() << "derived slot";
}
void emitSignal1()
{
emit signal1();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Derived d;
QTimer::singleShot(0, &d, SLOT(emitSignal1()));
return a.exec();
}
#include "main.moc"
Вывод соответствует ожидаемому:
derived slot
Я не смотрю на то, что делает метод connect
за кулисами, но я думаю, что это что-то вроде установки функции обратного вызова.
Если в конструкторе класса Base
нет вызова виртуального метода, то я пока не вижу побочных эффектов, ноэто правда?
Спасибо.