[英]How to properly clean an array? C++
我想清除并将动态数组的所有元素设置为0。我想我可以要么做
从长远来看,从良好实践的角度来看,我应该避免过度使用delete [] somePointer和new(如果我正确地清理了它),还是真的没有任何区别?
我认为在这种情况下,我将避免释放和重新分配阵列的存储。 最好的希望是,它最终的效率几乎与写入数组中的所有元素一样高效。 实际上,它几乎总是至少慢一点。
我可能也不会只写一个循环。 我可能会使用std::fill
或std::fill_n
根据类型填充0
或nullptr(等)数组。
您可能还需要调用memset()来清除内存。 删除和重新分配将更加昂贵,并可能导致碎片化。
如果要将内置类型的数组的所有元素设置为0,请将其删除,然后重新分配一个新数组将不起作用。 我会做这样的事情:
std::fill(arr,arr+size,0);
首先,使用std::vector
。 此外,只要您不存储指针(或将RAII与std::shared_ptr
或std::unique_ptr
),您就不必执行任何特殊操作。
如果将来需要此阵列,则删除+新操作将导致性能开销。 请改用std :: fill或memset函数。
正确的方法是使用std :: vector <> 。 如果使用clear()方法,它将破坏向量的所有元素,同时保留原始容量,因此您可以添加新元素而无需重新分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.