После того как сигнал обработан я удаляю его оператором delete. Всегда спрашиваю себя, что там происходит в памяти? Как быть уверенным, что память полностью очистилась.
о таких тонкостях как-то никогда не задумывался
как я это понимаю: область «кучи», на которую указывает указатель, помечается удаленной и становится невалидной. далее ОС уже решает что делать с этим куском памяти (изъять ее у программы или нет). может кто-то поправит/дополнит мой ответ.
очистилась эта память или нет ты не узнаешь, но вот то, что вероятнее всего программа упадет при обращении в эту область памяти (например попытка вызвать метод у удаленного указателя) — это да.
стек же — это фиксированная область памяти (уже выделенная), в которой переменные просто занимают место (не нужно у ОС явно запрашивать память как в случае с кучей). попал на стек — ты уже с памятью, вылетел со стека — и ты «без памяти» (удаление происходит автоматически), т.е. переменная находится в невалидной области памяти. послеэ этого обратиться к переменной не даст компилятор (она будет вне области видимости), но при попытке удалить такую переменную delete'ом, она будет еще раз удалена при вылете со стека, что и приведет к падению программы.
А close() идентичен опературу delete или нет?
нет конечно. но если ты окну поставишь атрибут WA_DeleteOnClose, то оно заодно и удалится.
bool QWidget::close() [slot]
Closes this widget. Returns true if the widget was closed; otherwise returns false.
First it sends the widget a QCloseEvent. The widget is hidden if it accepts the close event. If it ignores the event, nothing happens. The default implementation of QWidget::closeEvent() accepts the close event.
If the widget has the Qt::WA_DeleteOnClose flag, the widget is also deleted. A close events is delivered to the widget no matter if the widget is visible or not.