Я немного запутался, стоит ли мне предпочитать инициализировать мои основные виджеты в стеке или в куче.В «Программировании C ++ GUI с QT 4» основные виджеты инициализируются в стеке.Прежде чем я скажу больше, я объясню, что я имею в виду:
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 вызовет переполнение стека, но, конечно, это будет на вершине любого другогоиспользование стека моим приложением.