3

wxWidgets の場合、なぜ次のように言う必要があるのですか?

MyFrame *frame = new MyFrame

それ以外の:

MyFrame frame;

2つの違いは何ですか?2 番目の方が読みやすく、使いやすいですが、すべての例で最初のものを使用しているため、その理由は何なのか疑問に思いました。

明確にするために、2 番目のバージョンが機能しないことはわかっていますが、2 番目の形式ではなく最初の形式を使用する必要がある特定の設計上の決定があるかどうか疑問に思っています。ティア。

4

1 に答える 1

3

1 つ目は、ヒープに新しい MyFrame インスタンスを割り当て、それへのポインターを返します。2 つ目は、スタック上に新しい MyFrame インスタンスを直接作成します。

最初の構文を使用する必要があるのは、このフレーム (UI 要素) をウィンドウなどの別の UI 要素に追加するためです。ウィンドウはフレームへのポインターを受け取り、それを子として追加します。

2 番目の構文を使用する場合は、スタック オブジェクト (&frame) にポインターを渡す必要があります。これはコンパイルされますが、メソッドが返されるとすぐに、frame がスコープ外になるため、frame のデストラクタが呼び出されます。これにより、ウィンドウ内の参照が「壊れる」ことになります。

于 2009-05-11T22:28:46.887 に答える