signal senden und direkt deleteLater ausführen?
Verfasst: 19. Juni 2013 19:56
Moin,
angenommen, ich habe eine Klasse Foo die ein folgendes Signal besitzt: Das signal enthält also die Klasse selbst als Parameter, wobei meine Frage aber genauso gilt, wenn dies nicht der Fall wäre und stattdessen mit sender() auf das Objekt zugegriffen würde.
Folgende einfacher Klasse als Beispiel:
Diese Klasse löscht sich mittels deleteLater() selbst, nachdem sie das finished Signal gesendet hat. Ein ganz einfacher Test zeigt mir auch, das ich nach dem finished Signal durchaus noch auf die message() Methode zugreifen darf:
Meine Frage ist nun, ob das wirklich sicher ist oder unter welchen Umständen ich darauf verzichten sollte. Falls es mit diesem Konstrukt ein Problem gibt, welche alternative habe ich?
MfG,
Hilefoks
angenommen, ich habe eine Klasse Foo die ein folgendes Signal besitzt:
Code: Alles auswählen
void finished(Foo *obj);
Folgende einfacher Klasse als Beispiel:
Code: Alles auswählen
class Foo : public QObject
{
Q_OBJECT
public:
Foo() { QTimer::singleShot( 0, this, SLOT( timerEvent() ) ); }
QString message() { return "Hello World!"; }
private slots:
void timerEvent() { emit finished( this ); this->deleteLater(); }
signals:
void finished(Foo *obj);
};
Code: Alles auswählen
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Foo *foo = new Foo;
QObject::connect( foo, &Foo::finished, [foo]() { qDebug() << foo->message(); } );
return app.exec();
}
MfG,
Hilefoks