今天我看到一个奇怪的指针初始化。它看起来像这样:
struct A
{
void* data;
int bufLen;
...
}
void fun(A* a, int* result)
{
SomeClass* b = new (a->data) SomeClass();
}
它完全没问题,它确实可以编译,它确实有用,但我不知道为什么。
我想知道变量b
的初始化是怎么回事。
是演员吗?它是新内存插槽中变量a->data
的副本吗?
答案 0 :(得分:2)
它被称为 placement new ,它通常用于将对象放置在内存中的指定地址中。
在您的代码中,SomeClass
类型的对象将被放置在a->data
的内存位置。
要使用它,您可以自己重载operator new
,或使用标题库<new>
中包含的标准库中已定义的那些。