У меня есть класс, похожий на этот:
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 выдает сигнал error (). Если я обработаю это следующим образом, моя программа вылетит:
void FakeRunner::procError(QProcess::ProcessError rc)
{
delete proc;
proc = 0;
}
Это работает хорошо, хотя, если я не удаляю указатель. Итак, вопрос в том, как (и когда) мне удалить указатель на QProcess? Я считаю, что я должен удалить его, чтобы избежать утечки памяти. FakeRunner :: run () может вызываться много раз, поэтому утечка, если она есть, будет расти.
Спасибо!