我知道当一个对象的内存要在特定的内存位置分配时,我们需要放置new运算符。 e.g。
int* MemoryBuffer = malloc(sizeof(int)*10); MyClass* Object = new (MemoryBufer) Myclass;
我们不能这样做吗
MyClass* Object = reinterpret_cast<MyClass*>(MemoryBuffer);
Object将指向上面malloc分配的内存。 为什么我们需要放置新操作符,它是做同样的事情还是有任何区别?
答案 0 :(得分:2)
如果你写:
auto MemoryBuffer1 = malloc(sizeof(Myclass));
Myclass *pObject1 = new (MemoryBuffer1) Myclass;
auto MemoryBuffer2 = malloc(sizeof(Myclass));
Myclass *pObject2 = reinterpret_cast<Myclass*>(MemoryBuffer2);
然后*pObject1
是一个正确构造的对象,并且将调用构造函数。 *pObject2
只是指向随机字节集合的指针,并且不是有效对象。
答案 1 :(得分:0)
第一个(placement new)调用MyClass
的构造函数和第二个(重新解释强制转换)不会。