首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Qt应用程序是否具有自动垃圾收集功能?

Qt应用程序是否具有自动垃圾收集功能?
EN

Stack Overflow用户
提问于 2015-08-27 22:58:02
回答 2查看 8.3K关注 0票数 6

我正在研究这个问题,但我看不到一个确凿的答案。Qt窗口小部件应用程序在退出时会清除内存吗?从QObject派生出来有什么不同吗?如果有垃圾回收,为什么会有QSharedPointer类呢?我从我的代码的以下上下文中询问。

代码语言:javascript
复制
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来改进上面的代码更好呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-27 23:11:04

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

在您的例子中,当您的MainWindow类被销毁时,QProcesses将被销毁。

编辑:https://stackoverflow.com/a/19332239/841330 RobbieE的答案真的很好。

票数 10
EN

Stack Overflow用户

发布于 2015-08-27 23:16:56

Qt处理“所有权”树结构。一个QObject可能有一组子对象,如果它被删除了,那么它将删除它的所有子对象。

在您的代码中,当您传递的syncProcess被删除或被显式删除时,this将被删除。

您可以通过将finished信号连接到它自己的deleteLater插槽,让它在发送信号后自行删除。:

代码语言:javascript
复制
connect(syncProcess, SIGNAL(finished(int)), syncProcess, SLOT(deleteLater()) );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32252841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档