Я изучаю это, но я не вижу окончательного ответа. Очищает ли приложение виджета 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
для улучшения кода выше?
new QProcess(this);
вы создали новый объектQProcess
, принадлежащийthis
экземпляруMainWindow
. КогдаQObject
уничтожается, он, в свою очередь, уничтожает все принадлежащие ему объекты. - person Igor Tandetnik   schedule 27.08.2015QSharedPointer
или сделатьQProcess
переменной-членом? - person zar   schedule 27.08.2015finished
.QObject::deleteLater
удобен для этого (это позволяет избежать удаления объекта, находящегося в сигнале этого объекта). - person Igor Tandetnik   schedule 27.08.2015