关于两个类互相引用的析构问题

关于两个类互相引用的析构问题

写魔兽到3.0时,硬着头皮开始解决司令部类和武士类各自有对方指针的问题,在调用析构函数的时候,会出现如下错误

malloc: *** error for object 0x7ffeefbff580: pointer being freed was not allocated

查看了一下,发现在司令部类中delete指向武士类的指针时,会又从武士类指向司令部的指针指回来,形成循环引用

解决方法:声明临时变量,解除互相引用的关系

 void cut(){
        int i = 0;
        while(pWarriors[i]){
            Warriors* pw = pWarriors[i];//attention这里的pw只是一个Warriors型指针,delete掉pw时会把pw指向的武士对象删掉,
            pWarriors[i] = nullptr;
            delete pw;
            pw = nullptr
            i++;
        }
        delete [] *pWarriors;
    }//

注:了解了一下nullptr和NULL的不同,nullptr可以被隐式的转换为任何类型的指针,所以置空指针时尽量使用nullptr

完全不能理解,将pWarriors[time_h] = new Dragon(/…改成pWarriors[time_h+1] = new Dragon(/…后
就可以使用delete [] *pWarriors; 不会出现错误

如果不修改的话,就使用for循环,一个一个delete掉也不会出现错误

为什么呢?未完待续…(如有大佬指点不胜感激

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值