如果a是已经定义好的一个类,有如下定义语句:a *p[5],则当类对象数组指针p离开它的作用域时,系统自动调用类a的析构函数0次。
为什么是0次????
关于对象指针数组的析构
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- riskLoveHe 2016-06-11 11:06关注
在C++中编译器在临时对象**离开其作用域时**自动调用对象的析构函数。
理解上面这句话就可以很好的解释你的问题了。
例如在下面这段代码中class A{ int i; } void func(){ A *p[5]; //创建指针数组 A a; //局部变量(对象) p[0] = &a; //指针可以指向局部变量 p[1] = new A; //也可以不是指向局部变量 return; //局部对象被析构 } int main(){ func(); return 0; }
在func函数调用返回,回到main函数时,**局部变量所占的内存空间被释放,局部对象被析构**。数组p占用的空间被释放(但是它所指的变量所占空间不会因此被释放,所指对象也不会被析构,因为**所指对象不一定是局部对象**);对象a是局部对象,因此被析构,所占空间被释放,但这和数组p没有任何关系,被析构的原因仅仅因为它是局部变量,然而恰好p中有一个元素指向了它而已。p[1]所指对象是动态分配的,**不是局部对象**,不会被析构。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
- ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
- ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
- ¥15 perl MISA分析p3_in脚本出错
- ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
- ¥15 ubuntu虚拟机打包apk错误
- ¥199 rust编程架构设计的方案 有偿
- ¥15 回答4f系统的像差计算
- ¥15 java如何提取出pdf里的文字?
- ¥100 求三轴之间相互配合画圆以及直线的算法