数组放置的析构函数new

时间:2014-10-16 23:22:52

标签: c++ memory placement-new

我还没能找到答案:

T * blockPtr = static_cast<T*>(malloc(nb*sizeof(T)));
new (blockPtr) T[nb];
// use my blockPtr array
// call destructors (?)
free(blockPtr);

在这种情况下,调用析构函数的正确方法是什么?我应该手动循环每个项目并调用每个析构函数,还是有一个特定的语法在一次调用中执行此操作? 我知道在T类上调用delete[]时,像MSVC这样的编译器通常会在场景后面有一个特定的#34;向量析构函数&#34;这样做。

2 个答案:

答案 0 :(得分:5)

  

我应该手动循环每个项目并调用每个析构函数

  

在一次调用中是否有特定的语法?

没有


我希望你真的需要这样做!

答案 1 :(得分:2)

使用placement-new时,您必须自己调用析构函数:

void * blockPtr = malloc(nb*sizeof(T));
T * block = new (blockPtr) T[nb];

// use block array ...

// call destructors
for (int i = 0; i < nb; ++i)
    block[i].~T();

free(blockPtr);