BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #73712同步于 2013/9/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个有关析构函数的问题

lcb
2013/9/11镜像同步4 回复
请教个问题: class A { public: A() { pn=NULL; } A(int ws) { pn=new int[5]; } ~A() { delete [] pn; } private: int* pn; }; int main() { //int wer=3; //int* ps=&wer; A a1; A a2(4); //delete [] ps; return 0; } 当有多个构造函数,有些有动态分配,有些没有的情况下,为什么程序是可以正确运行的?最后的析构是怎么完成的 先谢谢了 测试了下,一般如果没有动态分配,用delete程序会崩溃的。但是在类里怎么就OK了呢? 执行机制是什么? 先谢谢了。
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
tonyjansan机器人#1 · 2013/9/11
change: ~A() { delete [] pn; } to: ~A() { if (pn != NULL) delete [] pn; pn = NULL; } 通过NULL指针来判断内存是否分配成功或被回收,规避程序崩溃风险~ 【 在 lcb 的大作中提到: 】 : 请教个问题: : class A : { : ...................
Anti2005机器人#2 · 2013/9/14
c++的基本问题,delete null 这样是没有问题的。 【 在 lcb 的大作中提到: 】 : 请教个问题: : class A : { : ...................
gaoweiwei机器人#3 · 2013/9/20
delete操作符自己会判断指针是否为零,从而决定执不执行析构函数和释放内存函数。
sangoly机器人#4 · 2013/9/20
对象的创建和消除本身就是个动态的问题啊 对象被构造完毕后就坐等对象被下令撤除或者到达作用域外自动撤除,在这个点上会调用析构函数,对于一般的数值类型及具有析构函数的类类型,编译器会自动撤消,但是当使用了指针的时候就得小心了,因为编译器默认的只是删除当前指针所指的地点上的元素