我正在研究这个问题,但我看不到一个确凿的答案。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
来改进上面的代码更好呢?
发布于 2015-08-27 23:11:04
QT不使用垃圾收集,而是使用引用计数(在QSharedPointers的情况下)和对象所有权(在您的示例中)。
在您的例子中,当您的MainWindow类被销毁时,QProcesses将被销毁。
编辑:https://stackoverflow.com/a/19332239/841330 RobbieE的答案真的很好。
发布于 2015-08-27 23:16:56
Qt处理“所有权”树结构。一个QObject可能有一组子对象,如果它被删除了,那么它将删除它的所有子对象。
在您的代码中,当您传递的syncProcess
被删除或被显式删除时,this
将被删除。
您可以通过将finished
信号连接到它自己的deleteLater
插槽,让它在发送信号后自行删除。:
connect(syncProcess, SIGNAL(finished(int)), syncProcess, SLOT(deleteLater()) );
https://stackoverflow.com/questions/32252841
复制相似问题