在创建时将指针转换为变量

时间:2016-07-04 09:26:30

标签: c++

今天我看到一个奇怪的指针初始化。它看起来像这样:

struct A
{
  void* data;
  int bufLen;
  ...
}

void fun(A* a, int* result)
{
  SomeClass* b = new (a->data) SomeClass();
}

它完全没问题,它确实可以编译,它确实有用,但我不知道为什么。 我想知道变量b的初始化是怎么回事。 是演员吗?它是新内存插槽中变量a->data的副本吗?

1 个答案:

答案 0 :(得分:2)

它被称为 placement new ,它通常用于将对象放置在内存中的指定地址中。

在您的代码中,SomeClass类型的对象将被放置在a->data的内存位置。

要使用它,您可以自己重载operator new,或使用标题库<new>中包含的标准库中已定义的那些。