如果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 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题