我有一个类A
我创建了一个指针:
A * const q = reinterpret_cast<A * const>(new char[2 * sizeof(A)]);
我有 2 个对象:
new (q)A;
new (q + 1) A;
如果我像这样删除指针:
-
delete q;
它调用了一次A
的析构函数 -
delete[] reinterpret_cast<char *>(q);
没有~A()
的电话 -
delete q; delete (q+1);
没关系,订单崩溃了 -
delete [] q
也在崩溃
正确的做法,我觉得是这样的:
q->~A();
q[1].~A();
delete[] reinterpret_cast<char *>(q);
谁能告诉我内存分配/解除分配的原因以及发生了什么?
最佳答案
当然,您不能在实例上调用 delete
,因为它假设它将执行 new
的计数器并释放内存。它不知道您已使用 placement-new
为对象分配后备存储。我认为最后的片段也是正确的:运行析构函数,并手动释放内存,因为只有您知道它来自哪里。
关于c++ - 内存是如何分配的,又是如何释放的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333315/