如果我在我的程序中使用它來啓動ffmpeg命令。QT QProcess內存管理
QProcess *cmd1 = new QProcess();
cmd1->start(ffmpeg command);
if (!cmd1->waitForStarted())
return false;
if (!cmd1->waitForFinished())
return false;
然後在整理過程將內存從堆釋放其自身的或我必須使用
刪除CMD1。
如果我在我的程序中使用它來啓動ffmpeg命令。QT QProcess內存管理
QProcess *cmd1 = new QProcess();
cmd1->start(ffmpeg command);
if (!cmd1->waitForStarted())
return false;
if (!cmd1->waitForFinished())
return false;
然後在整理過程將內存從堆釋放其自身的或我必須使用
刪除CMD1。
如果您將Parent設置爲如下所示的QProcess,那麼您不需要手動刪除它。
父可以是創建QProcess的QObject。
QProcess *cmd1 = new QProcess(parent);
但是,如果你不能設置父母,那麼你需要刪除它。
它可能仍然是一個問題,但如果父對象是具有應用程序生命週期的對象,但會啓動大量進程。然後,QProcess對象將不會被刪除,直到刪除父項爲止。在應用程序退出。我在這種情況下立即清理一下。 –
或者,或除了可以設置進程,刪除自身,當它完成: -
// using Qt 5 connect syntax
connect(cmd1, &QProcess::finished, cmd1, &QProcess::deleteLater);
這可能是首選的方法,如果你傳遞給你的QProcess中的對象的父對象可能比QProcess對象需要更長的生命週期。
是否值得刪除過程?如果您有一個實時應用程序,它不會運行幾個小時,從性能角度來看可能會更好,而不是刪除。 – user1767754
你必須自己刪除你的'QProcess'。調用'cmd1-> deleteLater()'也可以。 – vahancho