QT - Главный виджет - стек или куча?

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

Я понимаю, что маловероятно, что сам QWidget вызывает переполнение стека, но, конечно, это будет поверх любого другого использования стека, которое может иметь мое приложение .

9
задан Lightness Races with Monica 31 December 2011 в 04:47
поделиться