QT - это довольно старая школа C++, поэтому многие из ее примеров используют необработанные указатели и ручные вызовы для delete
без соответствия RAII. Это может выглядеть довольно хорошо на практике, так как большая часть вашего QObjects
часто может быть передана права собственности на контейнер, совместимый с RAII, довольно быстро, за исключением нескольких, и потому, что Qt вряд ли выдает исключения.
Однако, он предоставляет свои интеллектуальные указатели, как это:
http://doc.qt.digia.com/4.6/qscopedpointer.html
QScopedPointer<Widget> wid(new Widget);
wid->show();
// `wid` will automatically call `delete` when it goes out of scope.
Поскольку часто необходимо передать в собственность, чтобы сделать такие вещи, как вставка дочерних виджетов в макет, метод take
становится который в основном эквивалентен методу release
от std::unique_ptr
.
Я хотел бы предложить только придерживаться стандартного C++ смарт-указатели, как unique_ptr
, в этом случае вы можете сделать это:
unique_ptr<Widget> wid(new Widget);
wid->show();
... но это до вас, хотите ли вы пойти глубже в QT или держитесь ближе к царству стандарта C++.
Несколько дополнительных опций: 1) выделить в стеке 2) Использовать атрибут 'Qt :: WA_DeleteOnClose' в виджетах – peppe