數組的Placement New:可移植使用指南
雖然placement new 為數組分配提供了強大的工具,但確保其可移植性可以一個挑戰。如同提供的範例中所觀察到的,Visual Studio 可以分配與傳遞給 new[] 的位址不同的緩衝區,這可能會導致記憶體損壞。
了解開銷
在陣列上使用 new 放置所涉及的開銷取決於編譯器。在 Visual Studio 中,編譯器會向緩衝區新增一個四位元組計數以追蹤數組中的元素數量。此計數對於刪除數組時調用物件析構函數至關重要。
可移植替代方案
要解決可移植性問題,請考慮以下替代方案:
為每個元素單獨分配新位置:
不要對整個數組使用新位置,而是單獨分配每個元素:
這種方法無需額外的開銷並確保可移植性。
手動物件銷毀:
無論採用哪種分配方法,請確保在刪除緩衝區之前手動銷毀數組中的每個物件:
此步驟可防止記憶體洩漏並確保正確的物件清理。
記憶體追蹤開銷
需要注意的是編譯器對於記憶體的開銷追蹤情況各不相同。例如,在 Visual Studio 中,從類別中刪除虛擬析構函數就不再需要四位元組計數。了解特定編譯器的記憶體追蹤要求可以幫助您優化效能。
以上是陣列的新放置可以便攜式使用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!