删除/释放由malloc分配并由new重新使用的内存

时间:2019-03-07 11:56:23

标签: c++ malloc new-operator free

在以下程序中,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);
}

通过malloc重用new的内存是否安全?以及如何释放内存?

1 个答案:

答案 0 :(得分:1)

new (p) A()placement new,它不分配内存,仅调用构造函数。

在由placement new返回的指针上调用常规delete是不确定的行为。

要在此处正确地分配内存,您需要先调用析构函数,然后free调用内存:

pa->~A(); // or, in C++17 std::destroy_at(pa);
free(pa);