对于wxWidgets,你为什么要说:
MyFrame *frame = new MyFrame
而不是:
MyFrame frame;
两者有什么区别?第二个是更好阅读和更容易使用,但所有示例使用第一个,所以我想知道是什么原因。
为了澄清,我知道第二个版本不起作用,但我想知道是否有一个特定的设计决定导致必须使用第一个表格而不是第二个表格。 TIA。
答案 0 :(得分:3)
第一个在堆上分配一个新的MyFrame实例,并返回一个指向它的指针。第二个是直接在堆栈上创建一个新的MyFrame实例。
您需要使用第一种语法的原因是您将此框架(UI元素)添加到另一个UI元素(如窗口)中。窗口将指针指向一个框架,并将其添加为子框架。
如果你使用第二种语法,你必须将指针传递给你的堆栈对象(& frame),这将会编译,但是一旦你的方法返回,帧的析构函数就会被调用,因为帧会去超出范围。这将“破坏”窗口内部的引用。
答案 1 :(得分:0)
如果使用'new',则在堆上分配帧。否则它会在堆栈上分配,并在堆栈帧结束时被删除。