2
我有一個類看起來像這樣:如何正確刪除QProcess實例?
class FakeRunner : public QObject
{
Q_OBJECT
private:
QProcess* proc;
public:
FakeRunner();
int run()
{
if (proc)
return -1;
proc = new QProcess();
QStringList args;
QString programName = "fake.exe";
connect(comp, SIGNAL(started()), this, SLOT(procStarted()));
connect(comp, SIGNAL(error(QProcess::ProcessError)), this,
SLOT(procError(QProcess::ProcessError)));
connect(comp, SIGNAL(finished(int, QProcess::ExitStatus)), this,
SLOT(procFinished(int, QProcess::ExitStatus)));
proc->start(programName, args);
return 0;
};
private slots:
void procStarted() {};
void procFinished(int, QProcess::ExitStatus) {};
void procError(QProcess::ProcessError);
}
由於「fake.exe」並不在我的系統存在,PROC發出錯誤()信號。如果我像下面那樣處理它,我的程序崩潰了:
void FakeRunner::procError(QProcess::ProcessError rc)
{
delete proc;
proc = 0;
}
但是,如果我不刪除指針,它工作得很好。所以,問題是應該如何(以及何時)刪除指向QProcess的指針?我相信我必須刪除它以避免內存泄漏。 FakeRunner :: run()可以被調用多次,所以泄漏(如果有的話)會增長。
謝謝!
我明白了。在我調用proc-> deleteLater()之後它是否安全無效,或者我應該使用不同的方法來查找進程是否存在(我在run()函數的開頭檢查這個以避免重複的進程)? – Kopfschmerzen 2010-04-27 07:22:50
您可以安全地取消deleteLater()後的指針。 – VestniK 2010-04-27 08:19:10