Why some examples don't delete the pointer member newed in the destructor?
Solved
General and Desktop
-
E.g in "audio" example :
widget.h:class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); private: XYSeriesIODevice *m_device; QChart *m_chart; QLineSeries *m_series; QAudioInput *m_audioInput; };
widget.cpp:
Widget::Widget(QWidget *parent) : QWidget(parent), m_device(0), m_chart(0), m_series(0), m_audioInput(0) { m_chart = new QChart; QChartView *chartView = new QChartView(m_chart); chartView->setMinimumSize(800, 600); m_series = new QLineSeries; m_chart->addSeries(m_series); QValueAxis *axisX = new QValueAxis; axisX->setRange(0, 2000); axisX->setLabelFormat("%g"); axisX->setTitleText("Samples"); QValueAxis *axisY = new QValueAxis; axisY->setRange(-1, 1); axisY->setTitleText("Audio level"); m_chart->setAxisX(axisX, m_series); m_chart->setAxisY(axisY, m_series); m_chart->legend()->hide(); m_chart->setTitle("Data from the microphone"); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(chartView); setLayout(mainLayout); QAudioFormat formatAudio; formatAudio.setSampleRate(8000); formatAudio.setChannelCount(1); formatAudio.setSampleSize(8); formatAudio.setCodec("audio/pcm"); formatAudio.setByteOrder(QAudioFormat::LittleEndian); formatAudio.setSampleType(QAudioFormat::UnSignedInt); QAudioDeviceInfo inputDevices = QAudioDeviceInfo::defaultInputDevice(); m_audioInput = new QAudioInput(inputDevices,formatAudio, this); m_device = new XYSeriesIODevice(m_series, this); m_device->open(QIODevice::WriteOnly); m_audioInput->start(m_device); } Widget::~Widget() { m_audioInput->stop(); m_device->close(); }
XYSeriesIODevice *m_device; QChart *m_chart; QLineSeries *m_series; QAudioInput *m_audioInput;
All of them don't have parent to be deleted, but the destructor has not deleted them.
-
@doodle
because a widget gets the parent set as soon as it is added to a layout, or to be more specific when the layout then gets installed on a widget.
Some other objects take owndership of the objects when they are passed as parameter.
Likem_chart
tochartView
widget, which then gets added to a layout.So they are all deleted implicitly when the container widget gets deleted.