gpt4 book ai didi

c++ - 为什么我们必须在 C++ 中取消分配数组数组而不是整个 "matrix"

转载 作者:行者123 更新时间:2023-11-28 01:14:13 25 4
gpt4 key购买 nike

如果我们有

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

我们可以通过首先对所有行调用 delete [] 然后最后调用 delete [] A 来释放内存。为什么我们不能直接删除[] 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 等。理想情况下,开发人员以确保子对象/子分配得到适当管理的方式一起使用这些东西。

关于c++ - 为什么我们必须在 C++ 中取消分配数组数组而不是整个 "matrix",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59227963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com