C++对象声明混乱



我正试图在C++中实现BST,我遇到了以下两种创建节点的方法:

node* z = new node();
z->key = d;
z->left = NULL;
z->right = NULL;

然后这个:

node* y = NULL;
node* x = root;
node* parent = NULL;

叫不叫新接线员有什么区别?

编辑

例如,之间有什么区别

node* q = new node(); 

node* q;

你为什么要选择这样或那样的方式?这样或那样有优势吗?

要回答注释中的问题,是的,这是有区别的。

当您执行node* q = new node()时,您声明一个指向node对象的指针,然后在运行时为一个node对象动态分配足够的内存,并调用默认构造函数(或者,值初始化对象,它取决于类/结构),最后将指向新分配对象的指针分配给q

当你做node* q;时,你只需要声明一个指向node对象的指针,就这样了。指针将指向什么取决于你在哪里声明指针:如果你将其声明为全局变量,它将初始化为零,并变为空指针;如果你把它声明为局部变量,它的值是不确定的,而且在现实中看起来是随机的。两者都不是有效的指针,取消引用它将导致未定义的行为。还有第三种选择,即将node* q;声明为classstruct中的成员变量,则初始值取决于类/结构的创建和初始化方式(例如,如果结构是值初始化的,是否有构造函数对其进行初始化等)

我很确定(如果我错了,有人会纠正我),使用新运算符会为该变量分配动态内存。变量很可能已经分配了一些垃圾值,当您为它们分配新值时,这些垃圾值会被覆盖。而赋予它NULL只是赋予它NULL值(可能是0000000)。

最新更新