C++基础:删除指针数组。
现在在删除以下类型的指针数组遇到问题。
假设有三个类:
class Duck;
class SuperDuck1: public Duck;
class SuperDuck2: public Duck;
代码问题如下:
int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};// delete [] duck; // 出错啦,原因是? 我理解是delete[]会将一段连续的内存删除,所以对这种情况同存溢出。for(int i = 0; i < 3; ++i){ // 这样删除就正常。 delete duck[i];}Duck* duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};//int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};//duck本身不是在堆上分配的,不等delete// delete [] duck; for(int i = 0; i < 3; ++i){ // 这样删除就正常。 delete duck[i];}
[解决办法]
可以
Duck** duck = new (Duck*)[3];duck[0] = new Duck();duck[1] = new SuperDuck1();duck[2] new SuperDuck2();for(int i = 0; i < 3; ++i){//是先删除duck[i]吗 delete duck[i];}delete[] duck;