3

对于wxWidgets,为什么要说:

MyFrame *frame = new MyFrame

代替:

MyFrame frame;

两者有什么区别?第二个更易读且更易于使用,但所有示例都使用第一个,所以我想知道原因是什么。

澄清一下,我知道第二个版本不起作用,但我想知道是否有特定的设计决定导致必须使用第一种形式而不是第二种形式。TIA。

4

1 回答 1

3

第一个在堆上分配一个新的 MyFrame 实例,并返回一个指向它的指针。第二个直接在堆栈上创建一个新的 MyFrame 实例。

您需要使用第一种语法的原因是您将将此框架(UI 元素)添加到另一个 UI 元素中,例如窗口。该窗口会将指针指向一个框架,并将其添加为子框架。

如果您使用第二种语法,则必须将指针传递给您的堆栈对象(&frame),这将编译,但是一旦您的方法返回,frame 的析构函数就会被调用,因为 frame 会超出范围。这将“破坏”窗口内的引用。

于 2009-05-11T22:28:46.887 回答