class Object{
// some code here
}
char* c = new char[64];
根据我从上面的代码示例中学到的,我已经在堆中分配了64个字节的内存。所以现在我有一块内存可以使用。
我的问题:是否可以仅将前16个字节强制转换为上述分配的64个字节的Object *?如果是,该怎么办?如果没有,为什么?
答案 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 */);