delete/free 由 malloc 分配并由 new 重用的内存
delete/free memory allocated by malloc and reused by new
在下面的程序中,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
内存是否安全?以及如何释放内存?
new (p) A()
是 placement new 不分配内存,只调用构造函数。
在 placement new 返回的指针上调用常规 delete
是未定义的行为。
要在此处正确解除分配,您需要调用析构函数,然后 free
内存:
pa->~A(); // or, in C++17 std::destroy_at(pa);
free(pa);
在下面的程序中,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
内存是否安全?以及如何释放内存?
new (p) A()
是 placement new 不分配内存,只调用构造函数。
在 placement new 返回的指针上调用常规 delete
是未定义的行为。
要在此处正确解除分配,您需要调用析构函数,然后 free
内存:
pa->~A(); // or, in C++17 std::destroy_at(pa);
free(pa);