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

关于对象指针数组的析构

如果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 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 求三轴之间相互配合画圆以及直线的算法