为什么可以在此处使用“删除”?

时间:2019-08-10 02:33:47

标签: c++ pointers

由于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是适当的。

2 个答案:

答案 0 :(得分:0)

期望调用者传递对BinaryNode*的引用,该引用指向用new分配的对象。因此,将其传递给delete是安全的。

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

答案 1 :(得分:0)

  

为什么可以在此处使用“删除”?

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

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