MrWayne 发表于 2016-9-24 10:30:07

C++的delete p,p=NULL可以但为啥delete this,this=NULL不可以

//C++的delete p,p=NULL可以
//但为啥delete this,this=NULL不可以
void Node::DeleteNode()
{
        if (this->pLChild != NULL)
        {
                this->pLChild->DeleteNode();
        }
        if (this->pRChild != NULL)
        {
                this->pRChild->DeleteNode();
        }
        if (this->pParent != NULL)
        {
                if (this->pParent->pLChild == this)
                {
                        this->pParent->pLChild = NULL;
                }
                if (this->pParent->pRChild == this)
                {
                        this->pParent->pRChild = NULL;
                }
        }
        delete this;
}
//像上面这段代码是删除一个二叉树链表的实现,递归删除子子孙孙节点后,执行自杀(delete this),但不可以把this置为NULL了,一般都是最好是要这么做的,这样以后可以通过判是否为NULL,来判二叉树链表是否为空。。
不知道有什么可以替代的方法~求指导

仰望天上的光 发表于 2016-9-24 21:45:32

this指针并不是你定义的,对于Node类来说,this指针隐含的类型为: Node * const this;也就是说this指针指向的并非常量,但this指针本身是常量(因为this指针必定只能指向某个确定的对象),所以this=NULL企图对常量赋值是不允许的,
页: [1]
查看完整版本: C++的delete p,p=NULL可以但为啥delete this,this=NULL不可以