首頁 >後端開發 >C++ >如何正確刪除 C 中透過「placement new」分配的記憶體?

如何正確刪除 C 中透過「placement new」分配的記憶體?

Barbara Streisand
Barbara Streisand原創
2024-11-01 09:24:301001瀏覽

 How to Properly Delete Memory Allocated with

透過「放置新」和「刪除」進行記憶體管理

在C 語言中,記憶體分配和刪除在管理動態記憶體中起著至關重要的作用。雖然標準的“new”和“delete”運算符很常用,但“placement new”和“delete”提供了一種專門的方法來分配和刪除記憶體。

使用「placement new」

所提供的範例程式碼片段引發了有關刪除使用「placement new」分配的記憶體的正確方法的問題。在程式碼中,使用以下行分配記憶體:

void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);

,然後使用「placement new」將「Buffer」物件放置在此記憶體位置:

Buffer* buf = new(mem) Buffer(strlen(charString));

記憶體釋放選項

出現的問題是使用以下方式刪除內存:

delete (char*)buf;

還是簡單地:

delete buf;

要正確刪除分配的內存,重要的是要遵守具體指南:

  1. 使用分配時使用的相同運算子進行刪除:您必須使用「delete」運算子刪除使用「new」運算子指派的記憶體。由於使用了“placement new”,因此無法直接呼叫“Buffer*”指標上的刪除運算子。
  2. 手動呼叫析構函式:由於「placement new」繞過了常規物件建構程式中,必須手動呼叫析構函式。這通常是透過直接呼叫析構函數來完成的:
buf->~Buffer();
  1. 刪除基本記憶體:呼叫析構函數後,您可以刪除由" 分配的基本記憶體::operator new":
::operator delete(mem);

正確的釋放:

刪除分配的記憶體的正確方法如下:

buf->~Buffer();
::operator delete(mem);

透過執行以下步驟,您可以確保正確釋放使用「placement new」分配的內存,避免潛在的記憶體洩漏。

以上是如何正確刪除 C 中透過「placement new」分配的記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn