Я немного смущен тем, предпочитаю ли я инициализировать свои главные виджеты в стеке или в куче. В «Программе программирования C++ GUI с QT 4» основные виджеты инициализируются в стеке. Прежде чем я скажу больше, я объясню, что я имею в виду:QT - Главный виджет - стек или куча?
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;
}
Основная причина я приношу на этот вопрос, я обычно предпочитаю следовать шаблон с выбором кучи против стека:
- Если элемент большой - Heap
- Если деталь долгосрочный - Heap
- в противном случае - Stack
Теперь, я думаю, мой вопрос сводится к двум вопросам:
- Является QWidget большой до точки, где я должен бояться стек переполняется?
- Насколько велик стек для среднего приложения? Когда я должен бояться переполнения стека (кроме явно рекурсивных функций)?
Я понимаю, что маловероятно, что QWidget вызывает переполнение стека, но, конечно же, это будет поверх любого другого использования стека, которое может иметь мое приложение.
Используйте 'sizeof', чтобы узнать, насколько велик объект. Нет «среднего стека», он варьируется в широких пределах между приложениями, а ограничения сильно различаются по платформе. Если вы беспокоитесь, и так как это легко отслеживать, и нет абсолютно никакого аспекта производительности, просто используйте кучу. – Mat
Вы говорите, что это зависит от приложения, я предполагаю, что вы имеете в виду используемый стек, но как насчет доступности. Как насчет того, чтобы искать среднее значение для каждого приложения, каков минимальный размер стека для приложений Windows, Linux или Mac за последние 15 лет? В принципе, если я создаю кросс-платформенное приложение, мне любопытно, какие ограничения я должен ожидать. --- sizeof показывает 20, это точная, что кажется немного маленьким. – Serodis
Ugh @ "stack"/"heap" –