为什么在这里可以使用"删除"?

Why "delete" can be used here?

本文关键字:quot 删除 在这里 可以使 为什么      更新时间:2023-10-16

既然删除用于释放由new动态分配的内存,为什么可以在以下代码中使用删除?

此编码来自"Cpp 2014 中的数据结构和算法分析"图 4.27

void makeEmpty( BinaryNode*& t)
{
if(t!=nullptr)
{
makeEmpty(t->left);
makeEmpty(t->right);
delete t;
}
t=nullptr;
}

问题解决了,所有的二进制节点都是由新的创建或从其他二进制树复制的。因此,在此处使用删除是合适的。

调用方应传入对指向分配了new的对象的BinaryNode*的引用。因此,将其传递给delete是安全的。

BinaryNode *j = new BinaryNode (...);
// more code
makeEmpty (j);
// j will now be nullptr

为什么在这里可以使用"删除"?

该程序的格式正确t因为它是一个对象指针,因此对于delete的参数具有有效的类型。

如果t有效并指向分配了new的对象,并且对象的动态类型合适,则行为是明确定义的。