new返回一个指针.如果通过动态内存分配创建对象 - 显然必须使用指针.
QLabel label = new QLabel("Hello"); 是不正确的代码,不会编译.
为什么要为小部件使用动态分配?因为它们必须在函数调用之间存活,就像任何事件驱动的GUI系统一样.堆栈(本地对象)上的分配将在作用域的末尾解除分配,这对小部件不起作用.
因为如果要在堆栈上创建它们,它们将在作用域结束后删除。
如果您将编写如下内容:
void foo()
{
QWidget windget;
}
Run Code Online (Sandbox Code Playgroud)
foo()终止后,小部件将被删除。如果使用new,它将一直存在,直到将其手动删除(通常由父窗口小部件删除)为止。
我认为QLabel label = new QLabel("Hello");甚至不会编译。你可能会
QLabel label("Hello");