将分配的前16个字节的内存转换为UDT

时间:2019-01-23 15:38:39

标签: c++

class Object{
  // some code here
}

char* c = new char[64];

根据我从上面的代码示例中学到的,我已经在堆中分配了64个字节的内存。所以现在我有一块内存可以使用。

我的问题:是否可以仅将前16个字节强制转换为上述分配的64个字节的Object *?如果是,该怎么办?如果没有,为什么?

1 个答案:

答案 0 :(得分:2)

您无法“投射”内存以键入Object。它至少会违反严格的别名规则,并且有可能(取决于Object)也违反它的生存期,并导致不确定的行为。

相反,您想使用placement new在分配的空间中正确构造对象。该代码将如下所示:

class Object{
  // some code here
}

char* c = new char[64];
static_assert(sizeof(Object) <= 64, "Can't use allocated storage");
Object* p = new (c) Object(/* args */);