我正在研究这个,但我没有看到确凿的答案。 Qt小部件应用程序在退出时是否会清理内存?它是否与QObject有任何区别?如果有垃圾收集而不是为什么有QSharedPointer
类?我是从我的代码的以下背景中询问的。
void MainWindow::sync()
{
QString destPathUnixStyle = makePathUnix( _RootPath );
QString rsync_cmd = QString("rsync/rsync -a root@%1:/data/ '%2'").arg( _ip ).arg( destPathUnixStyle );
QProcess *syncProcess = new QProcess(this);
syncProcess->start( rsync_cmd );
qDebug() << "Sync started..";
connect(syncProcess, SIGNAL(finished(int)), this, SLOT(syncFinished()) );
_syncInProgress = true;
}
现在,当应用程序退出时,我的syncProcess
会被清除吗?如果用户在没有退出的情况下调用此函数一千次,会产生内存泄漏吗?
更新
鉴于我的上述函数经常被多次调用,最好是声明QProcess
成员变量或仅使用QSharedPointer
来改进上面的代码吗?
答案 0 :(得分:9)
QT不使用垃圾收集,而是使用引用计数(在QSharedPointers的情况下)和对象所有权(在您的示例的情况下)。
在您的情况下,当您的MainWindow类被销毁时,QProcesses将被销毁。
编辑:https://stackoverflow.com/a/19332239/841330罗比的回答非常好。
答案 1 :(得分:1)
Qt处理&#34;所有权&#34;树的结构。 QObject可能有一组子项,如果它被删除,那么它将删除它的所有子项。
在您的代码中,当您传递的syncProcess
被删除或明确删除时,this
将被删除。
您可以通过将finished
信号连接到自己的deleteLater
广告位来发送信号后让它自行删除。:
connect(syncProcess, SIGNAL(finished(int)), syncProcess, SLOT(deleteLater()) );