由于delete用于释放由new动态分配的内存,因此为什么可以在以下代码中使用delete?
此编码来自“ Cpp 2014中的数据结构和算法分析”图4.27
void makeEmpty( BinaryNode*& t)
{
if(t!=nullptr)
{
makeEmpty(t->left);
makeEmpty(t->right);
delete t;
}
t=nullptr;
}
问题解决了,所有BinaryNode都是由其他BinaryTree创建或复制的,由new创建的。因此,在此处使用delete是适当的。
答案 0 :(得分:0)
期望调用者传递对BinaryNode*
的引用,该引用指向用new
分配的对象。因此,将其传递给delete
是安全的。
BinaryNode *j = new BinaryNode (...);
// more code
makeEmpty (j);
// j will now be nullptr
答案 1 :(得分:0)
为什么可以在此处使用“删除”?
程序的格式正确,因为t
是对象指针,因此对于delete
的参数是有效的类型。
如果t
有效并且指向分配有new
的对象,并且该对象的动态类型合适,则行为是明确定义的。