为什么我们必须在 C++ 中释放数组数组,而不仅仅是整个"matrix"

why do we have to deallocate array of arrays in C++ and not just the entire "matrix"

本文关键字:数组 不仅仅是 matrix 释放 我们 C++ 为什么      更新时间:2023-10-16

如果我们有

n=3;
m=3;
A= new int [n];
for(int i=0;i<n;i++){
A[n] = new int[3];
}

我们可以通过首先在所有行上调用delete []然后最后delete [] A来释放内存。为什么我们不能delete [] A

A如何确定它需要释放A[0]A[1]A[2]所指向的任何内容。

例如,如果我编写一个程序,例如:

auto A = new int* [3];
int i0;
int i1;
int i2;
A[0] = &i0;
A[1] = &i1;
A[2] = &i2;

那么delete [] A试图做任何事情都是错误的。

在直接内存分配的低级别(也称为直接新建/删除使用(下,由开发人员确定所有内容是否正确。

另一方面,C++提供了各种更高级别的功能以使事情变得更容易。例如能够使用执行适当清理的析构函数将内容包装在类中,以及诸如std::arraystd::vectorstd::unique_ptr等内容。理想情况下,开发人员将这些东西一起使用,以确保子对象/子分配得到适当的管理。

如果你delete数组,数组的每个元素都会调用它的析构函数。问题是指针没有析构函数,您需要显式delete它。