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