放置新建和删除:正确的内存释放
使用“placement new”运算符(new (mem) 语法)分配内存时和标准的 new 运算符一样,使用正确的方法释放内存至关重要。
考虑以下代码片段:
<code class="cpp">const char* charString = "Hello, World"; void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1); Buffer* buf = new(mem) Buffer(strlen(charString));</code>
要正确释放已分配的内存,您应该调用:
<code class="cpp">buf->~Buffer(); ::operator delete(mem);</code>
这是因为:
错误方法:
方法 1:
<code class="cpp">delete (char*)buf;</code>
这种方法是不正确的,因为它试图像删除 char* 指针一样删除缓冲区。然而,内存是通过placement new分配的,所以必须使用operator delete来代替。
方法2:
<code class="cpp">delete buf;</code>
这种方法也是不正确的,因为它失败了手动调用 Buffer 对象的析构函数。因此,该对象获取的任何资源可能不会被释放,可能导致内存泄漏或其他问题。
以上是以下是一些标题选项,请记住问题格式和与内容的相关性: 选项1(聚焦问题): * 为什么使用 Placement New 时 `delete buf` 不正确? 选项 2(的详细内容。更多信息请关注PHP中文网其他相关文章!