为什么我们需要安置新的运营商?

时间:2016-03-25 10:35:43

标签: c++

我知道当一个对象的内存要在特定的内存位置分配时,我们需要放置new运算符。 e.g。

int* MemoryBuffer = malloc(sizeof(int)*10);
MyClass* Object = new (MemoryBufer) Myclass;

我们不能这样做吗

MyClass* Object = reinterpret_cast<MyClass*>(MemoryBuffer);

Object将指向上面malloc分配的内存。 为什么我们需要放置新操作符,它是做同样的事情还是有任何区别?

2 个答案:

答案 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的构造函数和第二个(重新解释强制转换)不会。