我假設以清除並設置一個動態數組中的所有元素爲0。 我想我可以要麼只是做如何正確地清理數組? C++
- 一個for循環和它們全部設置爲0或空值,根據類型
- 或者我可以刪除它,並與同尺寸
重新分配一個新的數組中,從長遠來看很好的做法來看,我應該避免過度使用刪除[] somePointer,以及新的(如果我妥善清理它),還是它沒有真正有什麼區別?
我假設以清除並設置一個動態數組中的所有元素爲0。 我想我可以要麼只是做如何正確地清理數組? C++
重新分配一個新的數組中,從長遠來看很好的做法來看,我應該避免過度使用刪除[] somePointer,以及新的(如果我妥善清理它),還是它沒有真正有什麼區別?
我想在這種情況下,我會避免釋放和重新分配陣列的存儲。關於最好的你可以希望的是,它最終會像寫入數組中的所有元素一樣高效。事實上,它幾乎總是會慢一點。
雖然我可能不會只寫一個循環。我可能會使用std::fill
或std::fill_n
來填充0
或nullptr(等)的陣列,具體取決於類型。
首先,使用std::vector
。此外,只要你不存儲指針(或者使用類似std::shared_ptr
或std::unique_ptr
的RAII),你就不必做任何特殊的事情。
這是如何解釋如何清除元素爲0? –
@TonyD,它解釋了不要使用數組與原始指針,這是公然明顯的,我OP,目前正在做。 – StoryTeller
如果要將內置類型的數組的所有元素設置爲0,請將其刪除,重新分配新數組將不會執行此操作。我會做這樣的事情:
std::fill(arr,arr+size,0);
如果您需要在此數組中刪除未來新+操作會導致性能開銷。改用std :: fill或memset函數。
您可能還想調用memset()來清除內存。 刪除和重新分配將會更加昂貴並且可能導致碎片化..
正確的方法是使用std::vector<>。如果使用clear()方法,它將在保留原始容量的同時銷燬矢量的所有元素,以便您可以添加新元素而無需實際處理。
你想調用析構函數,或者只是重複使用分配的內存或顯式覆蓋某些內存區域?請添加顯示您實際嘗試實現的細節/代碼。 – moooeeeep
@simonc這將刪除元素,而不是零。 – Angew