setAttribute(Qt::WA_DeleteOnClose)的原理
class MainWindow;构造函数中增加:setAttribute(Qt::WA_DeleteOnClose)以后,
- C/C++ code
MainWindow mainWindow;mainWindow.setGeometry(30,30,1024,768);mainWindow.show();
当关闭mainWindow时候,会有异常。改成:
- C/C++ code
MainWindow* mainWindow = new MainWindow; mainWindow->setGeometry(30, 30, 1024, 768); mainWindow->show();
这样才可以,原因就是前者定义在栈上,后者定义在堆上,所以当设置了WA_DeleteOnClose以后,调用MainWindow析构函数才不会异常抛出。
setAttribute(Qt::WA_DeleteOnClose) 什么原理,有没有人研究过源码?
[解决办法]
这个是比较容易理解的,从名字上就能猜个差不多:Qt::WA_DeleteOnClose,当调用close()时,会对该对象的指针调用 delete pObj;
当然,看源码也很简单,打开 qwidget.cpp ,搜索 close() 函数就行了
[解决办法]
这个应该没什么神奇的吧?
class A
{
public:
A(){}
void deleteMe()
{
delete this;
}
};
int main()
{
A * a = new A;
a->deleteMe();
return 0;
}