将节点设置为 NULL 与删除节点之间的区别

psj*_*j01 2 c++

假设我有一个定义如下的节点结构:

struct Node
{
int data;
Node* left;
Node* right;
}
Run Code Online (Sandbox Code Playgroud)

假设我有一个节点 Node abc 和 xyz 以及:

abc->data = 1;
abc->right=NULL;
abc->left=xyz;

xyz->data =2;
xyz->right=NULL;
xyz->left=NULL;
Run Code Online (Sandbox Code Playgroud)

稍后如果我想删除节点 xyz,如果我说:

delete xyz 
Run Code Online (Sandbox Code Playgroud)

与说:

xyz=NULL;
Run Code Online (Sandbox Code Playgroud)

有人可以解释其中的差异或指出我正确的方向吗?

小智 5

不,它不一样。delete X;语句实际上调用 所指向的对象的析构函数,并释放/释放先前由运算X符 为该对象分配的内存。new

X = NULL;语句只是将地址 0x0 分配给指针X,既不销毁 所指向的对象X,也不释放内存,这与delete.