メイン ウィジェットをスタックまたはヒープのどちらで初期化するかについて、少し混乱しています。「QT 4 を使用した 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;
}
この質問をする主な理由は、通常、ヒープとスタックを選択するパターンに従うことを好むからです。
- アイテムが大きい場合 -ヒープ
- アイテムが長期の場合 -ヒープ
- それ以外 -スタック
さて、私の質問は 2 つの質問に集約されると思います。
- QWidget は、スタック オーバーフローを恐れるほど大きいですか?
- 平均的なアプリケーションのスタックの大きさは? スタックのオーバーフローをいつ恐れるべきですか (明らかに再帰関数以外)?
QWidget 自体がスタック オーバーフローを引き起こす可能性は低いと認識していますが、もちろん、これは私のアプリケーションで発生する可能性のある他のスタック使用量の上にあります。