萌新问一下如何用delete释放一个(数组指针)类型里的的数组元素

瑞芳 王 20 信誉分
2024-07-29T06:36:26.9933333+00:00

eg:

(Person*)  *p = new (Person*) [length];
p[i]=new Person();//i在这里是赋值的一种表现形式

对象p的一个星星接收new关键字的堆区地址,另一个用来标注Person*类型数组

记得应该可以用delete[] p来释放p数组来着,实际结果是等同于delete p;(就是数组里的Person* 类型没被释放,检验方法是在Person的析构函数写cout无打印)

我知道可以用for循环遍历p[i]后delete,但如题目所说,我该如何用delete[]释放p背后的Person* ?

(delete[] p也不行:)

(如果在析构的时候如果Person*类型的元素有成员是在堆区上的,那么不可读取;)

(如果没有,就会一直走析构)

开发人员技术 | C++
开发人员技术 | Visual Studio | 其他
0 个注释 无注释
{count} 票

接受的答案
  1. Minxin Yu 13,506 信誉分 Microsoft 外部员工
    2024-07-29T09:10:22.5766667+00:00

    您好,

    delete[] p是释放数组指针变量本身的内存,不会删除指针指向的对象的内存。
    C++并没有嵌套的释放内存的方式, 需要使用循环遍历释放内存。

      for (int i = 0; i < length; i++) {
      delete p[i];
     }
    
      delete[] p; 
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    1 个人认为此答案很有帮助。

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。