我对是否应该在堆栈或堆上初始化我的主要小部件有点困惑。在“使用 QT 4 进行 C++ GUI 编程”中,主要小部件在堆栈上进行初始化。在我说更多之前,我将解释我的意思:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show();
return app.exec();
}
现在,也许这仅仅是因为它更安全,也许是因为他们不想让读者对 QT 中的内存分配感到困惑。忽略对继承自 QObject 的对象的任何删除肯定会让读者“忘记”QT 对象的内存管理。但是,我的问题是,我们应该更喜欢这种方法还是以下方法:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow* mainWin = new MainWindow;
mainWin->show();
int execReturn = app.exec();
delete mainWin;
return execReturn;
}
我提出这个问题的主要原因是我通常更喜欢遵循选择堆与堆栈的模式:
- 如果项目很大 -堆
- 如果项目是长期的 -堆
- 否则 -堆栈
现在,我想我的问题可以归结为两个问题:
- QWidget 是否大到我应该担心堆栈溢出的程度?
- 一般应用程序的堆栈有多大?我什么时候应该担心堆栈溢出(除了明显的递归函数)?
我意识到 QWidget 本身不太可能导致堆栈溢出,但当然这将在我的应用程序可能具有的任何其他堆栈使用之上。