Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (class*object;)和(object=newclass();)之间有什么区别?_C++_Qt - Fatal编程技术网

C++ (class*object;)和(object=newclass();)之间有什么区别?

C++ (class*object;)和(object=newclass();)之间有什么区别?,c++,qt,C++,Qt,我不明白。为什么我们两者都需要?有什么区别 QTimer *timerobject; timerobject = new QTimer(this); 第一行是声明——在代码中,您将timerObject声明为指向QTimer类型的指针 在第二行中,您执行了许多操作:为QTimer变量分配内存,构建它,然后将QTimer变量的地址分配给在第一行中创建的指针变量 此外,您还可以将其写在一行中: QTimer * timerobject = new QTimer(this); 这两行都是必需的,因

我不明白。为什么我们两者都需要?有什么区别

QTimer *timerobject;
timerobject = new QTimer(this);

第一行是声明——在代码中,您将timerObject声明为指向QTimer类型的指针

在第二行中,您执行了许多操作:为QTimer变量分配内存,构建它,然后将QTimer变量的地址分配给在第一行中创建的指针变量

此外,您还可以将其写在一行中:

QTimer * timerobject = new QTimer(this);

这两行都是必需的,因为如果只声明对象,它就没有任何值。它只会指向nothing(nullptr)。如果您不声明它,编译器将不知道timerobject是什么,因此它将无法为它分配任何值。

我们不需要两者<代码>QTimer*timerobject=新QTimer(此)是最好的。或者根本不使用
new
。@SombreroChicken注意:这是Qt
QObject
子类实例,在本例中它有一个父类。父级将在销毁时删除其子级。因此,尽管在可能的情况下,最好不要对QoObject使用
new
(换句话说,当对象没有父对象,或者对象的生命周期比其父对象早结束时),但有时这是最简单的,对于新手程序员来说尤其安全,只需使用
new
并让父级执行
delete
。请注意,大多数指针不会初始化为任何默认值,因此它们通常不会是
nullptr
。它们将位于为指针变量保留的内存位置上(某些异常,如全局变量,如果未初始化,在程序启动时将为0)。