//根据栈的特性,父窗口在子窗口后创建,程序退出时,先析构父对象及其对象树(把子对象析构了),再析构子对象(其实已经析构了),造成二次析构异常。这种问题就要先创建父对象,再创建子对象;子对象析构时会从父对象的对象树上移除(子对象发出destroyed的信号,父对象的槽函数处理移除),再析构父对象,就不会二次析构子对象。或者将对象大胆地创建在堆上。
#include <QtWidgets/QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton quit("Quit");//子对象先创建的
QWidget window;//父对象后创建
quit.setParent(&window);//正式建立父子关系
quit.move(100, 100);
window.show();
return a.exec();
}//程序退出,“释放”栈对象异常。
网友评论