对于应该在堆栈上还是堆上初始化我的主小部件,我有点困惑。在“使用Qt4进行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本身不太可能导致堆栈溢出,但当然,这将超出我的应用程序可能具有的任何其他堆栈使用。
发布于 2011-12-31 16:02:10
您选择堆与堆栈的模式听起来是合理的,但我不太担心对象的大小。任何大型对象都应该在内部使用堆。向量通常是三个指针的大小,但可能非常大。
我认为您不应该担心任何对象都足够大,足以使堆栈本身溢出。虽然有可能,但这肯定是非常罕见的(我还没见过)。
我建议您也考虑一下简单性,您可以在堆上分配任何局部变量,然后在函数返回之前释放它,但是这将是不必要的复杂,通常被认为是错误的做法。
堆栈大小通常通过链接器设置进行配置。在Windows上,默认情况下是1MB。
https://stackoverflow.com/questions/8688956
复制相似问题