Предположим, у меня есть класс, подобный следующему:
#include <Object>
#include <QProcess>
class MyClass: public QObject {
private:
QPointer<QProcess> m_process{ nullptr };
public:
MyClass(QObject *parent = nullptr)
: QObject{ parent }
, m_process{new QProcess{} }
{
QObject::connect(m_process, &QProcess::errorOccurred,
this, [](QProcess::ProcessError error) {
qDebug() << "error: " << error;
});
}
~MyClass()
{
if (m_process) delete m_process; //--> is it necessary?
}
};
Нужно ли мне удалять m_process
вручную , как показано в деструкторе?
К сожалению, я не могу использовать std::unique_ptr
или std::shared_ptr
, поскольку
QObject::connect(m_process, &QProcess::errorOccurred,
this, [](QProcess::ProcessError error) {
qDebug() << "error: " << error;
});
Я не видел надлежащей перегрузки для QObject::connect
.
С другой стороны, в QPointer :: ~ QPointer () Я прочитал:
Уничтожает охраняемый указатель.Как и обычный указатель, уничтожение защищенного указателя не уничтожает объект, на который указывают.
Это означает, что QPointer::~QPointer()
будет удален, когда объект MyClass
выйдет из области видимости, и, следовательно, яудаляю m_process
дважды?
Или я неправильно понял?