如何正确清理阵列? C ++

时间:2014-02-18 08:20:20

标签: c++ dynamic-arrays

我想清除并将动态数组的所有元素设置为0。 我想我可以做到

  • 一个for循环并将它们全部设置为0或NULL,具体取决于类型
  • 或者我可以删除它,然后重新分配一个大小相同的新数组

从长远来看,在良好实践方面,我是否应该避免过度使用delete [] somePointer和new(如果我正确地清理它),或者它是否真的没有任何区别?

6 个答案:

答案 0 :(得分:7)

我认为在这种情况下,我会避免释放并重新分配阵列的存储空间。关于你能想到的最好的是它最终会像写入数组中的所有元素一样高效。实际上,它几乎总是至少慢一点。

我可能不会只写一个循环。我可能会使用std::fillstd::fill_n使用0或nullptr(等)来填充数组,具体取决于类型。

答案 1 :(得分:4)

您可能还想调用memset()来清除内存。 删除和重新分配将更加昂贵,并可能导致碎片化。

答案 2 :(得分:2)

如果要将具有内置类型的数组的所有元素设置为0,请将其删除,并重新分配新数组将不会执行此操作。我会做那样的事情:

std::fill(arr,arr+size,0);

答案 3 :(得分:1)

首先,使用std::vector。此外,只要您不存储指针(或使用类似std::shared_ptrstd::unique_ptr之类的RAII),您就不必做任何特别的事情。

答案 4 :(得分:0)

如果将来需要此数组,删除+新操作将导致性能开销。请改用std :: fill或memset函数。

答案 5 :(得分:0)

正确的方法是使用std::vector<>。如果使用clear()方法,它会在保留原始容量的同时销毁向量的所有元素,以便您可以在不重新分配的情况下添加新元素。