繁体   English   中英

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

[英]How to properly clean an array? C++

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

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

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

我认为在这种情况下,我将避免释放和重新分配阵列的存储。 最好的希望是,它最终的效率几乎与写入数组中的所有元素一样高效。 实际上,它几乎总是至少慢一点。

我可能也不会只写一个循环。 我可能会使用std::fillstd::fill_n根据类型填充0或nullptr(等)数组。

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

如果要将内置类型的数组的所有元素设置为0,请将其删除,然后重新分配一个新数组将不起作用。 我会做这样的事情:

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

首先,使用std::vector 此外,只要您不存储指针(或将RAII与std::shared_ptrstd::unique_ptr ),您就不必执行任何特殊操作。

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

正确的方法是使用std :: vector <> 如果使用clear()方法,它将破坏向量的所有元素,同时保留原始容量,因此您可以添加新元素而无需重新分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM