在 Qt 中,如果从临时对象调用信号,这样在调用插槽时可能会删除该对象,这是错误吗?
如果相关,代码会从临时对象的构造函数发出信号。
(注意:没有指针或引用作为参数传递,所以这不是关于悬空指针或引用的问题。我只想知道,以最简单的形式,从临时对象发出信号是否可以接受在 Qt 中。)
这是我的代码的缩短版本:
// My application
class HandyApplication: public QApplication
{
Q_OBJECT
public:
explicit HandyApplication( int argc, char * argv[] );
signals:
public slots:
void handySlot(std::string const msg);
};
// Class that will be instantiated to a temporary object
class Handy: public QObject
{
Q_OBJECT
public:
Handy()
{
QObject::connect(this, SIGNAL(handySignal(std::string const)),
QCoreApplication::instance(),
SLOT(handySlot(std::string const)));
emit handySignal("My Message");
}
signals:
void handySignal(std::string const msg);
};
// An unrelated function that may be called in another thread
void myFunction()
{
Handy temporaryObject; // This constructor call will emit the signal "handySignal" above
}
如您所见,临时对象从其构造函数发出信号,然后立即被销毁。 因此,可以在发送信号的对象被破坏之后调用槽。
这是安全的,还是潜在的问题或错误情况?