在内存中放置一个项目

Placement of an item in memory

请帮帮我。我分配内存如下(T是模板类型)

T * ptr = reinterpret_cast<T*>(operator new (sizeof(T));

然后我想把一个元素放到这个内存中;如果我这样做,我写了吗?

new (p) T(elem);

(元素的类型为 T)

更新:抱歉,我忘记写operator new是个错误

reinterpret_cast 不分配内存。我不知道你是怎么得到它的印象的。

T * ptr = reinterpret_cast<T*>((sizeof(T));

这(假设首先支持它)采用 T 类型的大小,它是一个整数值,并在实现定义的问题中将其重新解释为指向 [=13] 的指针=]值。

所以如果T 的大小是 16,那么 ptr 可能是指向地址 16.

的指针

这显然没有意义。

动态分配内存以放置对象的常用函数是operator new:

void* mem_ptr = operator new(sizeof(T));
T* ptr = new(mem_ptr) T(elem);