【问题标题】:Deallocate multidimensional array in c++在 C++ 中释放多维数组
【发布时间】:2012-10-08 18:27:42
【问题描述】:

我将如何销毁任意大小、维度和类型的动态数组? delete[] 会自动降低二维数组的层级,还是只删除第一层指针,因此程序需要手动迭代每个数组层级?

理想情况下,我需要一个命令(用于模板类)来破坏一到四维数组。如果有办法检查数组的维数,它也可以工作。

我正在使用动态数组,例如 double* ar = new double[100];

【问题讨论】:

  • 数组在 C++ 中是一维的。 delete[] 将删除使用new[] 创建的数组。如果数组是其他数组的数组(可能是其他数组),这将正常工作。你能详细说说你关心的问题吗?
  • 您已经收到了很好的答案;不过我想建议Boost.MultiArray,也许你会发现它适合你的 N 维数组。

标签: c++ multidimensional-array


【解决方案1】:

您需要手动遍历所有级别才能删除它们。
如果有办法检查尺寸,您可以使用它来选择正确的销毁过程。

另外,为什么不使用向量?它们速度很快,并且在超出范围时会自动释放

【讨论】:

    【解决方案2】:

    如果您像new int[10][20] 这样实例化二维数组,delete[] 将销毁所有数组,但如果您创建它像 myarray[i] = new int[20] 那样迭代,那么您将不得不再次迭代以销毁每个维度。

    如果您不确定如何销毁数组,我建议您使用 STL 向量。

    【讨论】:

      【解决方案3】:

      如果您使用 C++,请使用 std::vectorstd::unique_ptr

      【讨论】:

        【解决方案4】:

        基本上1 new = 1 delete10 new = 10 delete,所以你必须删除你分配的所有东西,那些操作调用的数量应该相等。

        没有办法知道(从编译器/程序的角度)什么是真正的数据指针,什么只是一些垃圾或在别处引用(并将被使用)等等。

        【讨论】:

          猜你喜欢
          • 2012-01-26
          • 2014-11-05
          • 1970-01-01
          • 2011-08-05
          • 2010-12-16
          • 2020-01-18
          • 2012-04-20
          • 1970-01-01
          相关资源
          最近更新 更多