C ++对象和内存分配

时间:2019-12-08 19:45:05

标签: c++ object memory

假设我有以下代码:

Object* obj = new Object();
void* mem = malloc(sizeof(obj) + 40);
*((Object*)mem) = *obj;

在那种情况下,是否可以保证将obj数据存储在malloc内存的开头,并且我可以使用块mem + sizeof(obj)的其余部分而不覆盖{ {1}}?

1 个答案:

答案 0 :(得分:4)

保证您具有未定义的行为。

首先,sizeof(obj)是指针的大小,而不是Object的大小。使用sizeof(*obj)sizeof(Object)。其次,在位置Object上没有mem,因此取消引用*((Object*)mem)是不确定的行为。

使用placement new

new (mem) Object(*obj); // or new (mem) Object(std::move(*obj));

Object放在mem块的开头。您可以自行决定使用40个剩余字节。