Andreadyx 2016-06-11 08:40 采纳率: 100%
浏览 2332
已采纳

关于对象指针数组的析构

如果a是已经定义好的一个类,有如下定义语句:a *p[5],则当类对象数组指针p离开它的作用域时,系统自动调用类a的析构函数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]所指对象是动态分配的,**不是局部对象**,不会被析构。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥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时遇到的编译问题