delete/free 由 malloc 分配并由 new 重用的内存

delete/free memory allocated by malloc and reused by new

在下面的程序中,new 重用了 malloc 分配的内存。但是如何释放内存呢?通过 freedelete?如何调用析构函数?

#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);