在内存中放置一个项目
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);
请帮帮我。我分配内存如下(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);