删除/释放由 malloc 分配并由 new [重复] 重用的内存
Posted
技术标签:
【中文标题】删除/释放由 malloc 分配并由 new [重复] 重用的内存【英文标题】:delete/free memory allocated by malloc and reused by new [duplicate] 【发布时间】:2019-03-07 11:56:22 【问题描述】:在以下程序中,new
重用了由malloc
分配的内存。但是如何释放内存呢? free
还是 delete
?如何调用析构函数?
#include <iostream>
struct A
A()
~A()
;
int main()
void* p = malloc(sizeof(A));
A* pa = new (p) A();
// codes...
delete pa;
// pa ->~A();
// free(p);
new
重用 malloc
内存是否安全?以及如何释放内存?
【问题讨论】:
你的情况应该使用free()
。
@πάνταῥεῖ 一个类可能需要调用析构函数。如何调用析构函数?在释放之前明确?还是解放后?
【参考方案1】:
new (p) A()
是placement new,它不分配内存,只调用构造函数。
在placement new 返回的指针上调用常规delete
是未定义的行为。
要在此处正确解除分配,您需要调用析构函数,然后调用free
内存:
pa->~A(); // or, in C++17 std::destroy_at(pa);
free(pa);
【讨论】:
可以在需要显式调用析构函数的任何地方使用destroy_at
吗?
@nano 我不明白为什么不这样做。除非你想避免#include <memory>
。以上是关于删除/释放由 malloc 分配并由 new [重复] 重用的内存的主要内容,如果未能解决你的问题,请参考以下文章