Qt应用程序是否有自动垃圾回收?

zar*_*zar 5 c++ qt garbage-collection memory-leaks qsharedpointer

我正在研究这个,但我没有看到一个确凿的答案.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;
}
Run Code Online (Sandbox Code Playgroud)

现在syncProcess应用程序退出时我会被清理干净吗?如果用户在没有退出的情况下调用此函数一千次,会产生内存泄漏吗?

更新

鉴于上面的函数经常被调用很多次,是否更好地声明QProcess一个成员变量或者只是用于QSharedPointer改进上面的代码?

Cha*_*lee 9

QT不使用垃圾收集,而是使用引用计数(在QSharedPointers的情况下)和对象所有权(在您的示例的情况下).

在您的情况下,当您的MainWindow类被销毁时,QProcesses将被销毁.

编辑:https: //stackoverflow.com/a/19332239/841330 RobbieE的回答非常好.