C++基础:删除指针数组。
现在在删除以下类型的指针数组遇到问题。
假设有三个类:
class Duck;
class SuperDuck1: public Duck;
class SuperDuck2: public Duck;
代码问题如下:
- C/C++ code
int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};// delete [] duck; // 出错啦,原因是? 我理解是delete[]会将一段连续的内存删除,所以对这种情况同存溢出。for(int i = 0; i < 3; ++i){ // 这样删除就正常。 delete duck[i];}这种类型的指针数组,还有没有其它的删除方法呢?
[解决办法]
删除完duck[i],再删除duck,没有其它的删除方法。
[解决办法]
duck本身是数组,不是用new申请的空间,因此不能delete
duck内部存放着三个使用new申请的空间的指针,这三个指针可以delete
[解决办法]
a* tmp = new a[10];
delete[] tmp;
new 出来的数组可以这样销毁
楼主是栈变量不用delete。
[解决办法]
这样是否可以,请大师指教
[code=C/C++][/code]
int** duck = new (int*) [3];
int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};
for(int i = 0; i < 3; ++i){//是先删除duck[i]吗
delete duck[i];
}
delete [] duck;
[解决办法]
两个层面,
1.指针数组的元素--duck[i]的对象都是一个一个new来的,那么就一个一个的delete
2.指针数组----不是new来的,不用delete
若是指向三个指针元素的指针是new来的,就再delete它
[解决办法]
- C/C++ code
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];}
[解决办法]
可以
- C/C++ code
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;