Qt deleteLater原理

使用场景

我们知道,我们可以对某个对象调用deleteLater来延迟删除这个对象,比如我们在QNetworkAccessManager的finished信号中删除QNetworkReply:

    connect(networkManager, &QNetworkAccessManager::finished, [=](QNetworkReply* reply) {
        reply->deleteLater();
        if () {
        	qDebug() << reply->header("aa");
			return;
		}
        if () {
        	qDebug() << reply->header("aa");
			return;
		}
        ...
        ...
    });

调用deleteLater表示对象将在下一次事件循环处理时被删除,但是在这个函数后面还可以继续使用它。像上面这个例子,有很多退出点,我在每个退出点去delete很麻烦,就可以调用deleteLater。

原理分析

原理是啥呢?我们来看源代码:

void QObject::deleteLater()
{
    QCoreApplication::postEvent(this, new QDeferredDeleteEvent());
}

deleteLater实现很简单,就是向消息队列post了一个QDeferredDeleteEvent消息,接收者是this(很关键)

你可能感兴趣的:(qt)