关于两个类互相引用的析构问题
写魔兽到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掉也不会出现错误
为什么呢?未完待续…(如有大佬指点不胜感激