Привет, эксперты. Есть Один Пример (из официальной документации Qt, по работе с последовательным портом), в котором используется сабж.
Кусок из .h:
signals:
void response(const QString &s);
void error(const QString &s);
void timeout(const QString &s);
if (serial.waitForBytesWritten(m_waitTimeout)) {
if (serial.waitForReadyRead(currentWaitTimeout)) {
QByteArray responseData = serial.readAll();
while (serial.waitForReadyRead(10))
responseData += serial.readAll();
const QString response = QString::fromUtf8(responseData);
emit this->response(response); // СИГНАЛ 1
} else {
emit timeout(tr("Wait read response timeout %1")
.arg(QTime::currentTime().toString())); // СИГНАЛ 2
}
} else {
emit timeout(tr("Wait write request timeout %1")
.arg(QTime::currentTime().toString())); // СИГНАЛ 3
}
Собственно, вопрос, разве объекты, ссылки на которые передаются сигналами 1-2-3 не должны быть незамедлительно уничтожены после emit'ов? Поскольку процитированный кусок кода, вроде как, выполняется в отдельном потоке, то будет использовано соединение Qt::QueuedConnection, поэтому слот приемника (receiver) формально может выполниться тогда, когда объекты, с которыми связаны ссылки, будут уже уничтожены.
Или нет?