假设我有以下代码:
Object* obj = new Object();
void* mem = malloc(sizeof(obj) + 40);
*((Object*)mem) = *obj;
在那种情况下,是否可以保证将obj
数据存储在malloc
内存的开头,并且我可以使用块mem + sizeof(obj)
的其余部分而不覆盖{ {1}}?
答案 0 :(得分:4)
保证您具有未定义的行为。
首先,sizeof(obj)
是指针的大小,而不是Object
的大小。使用sizeof(*obj)
或sizeof(Object)
。其次,在位置Object
上没有mem
,因此取消引用*((Object*)mem)
是不确定的行为。
new (mem) Object(*obj); // or new (mem) Object(std::move(*obj));
将Object
放在mem
块的开头。您可以自行决定使用40
个剩余字节。