所以这条语句分配了内存但是没有调用MyClass的构造函数
MyClass *ptr = (MyClass*)::operator new (sizeof(MyClass));
为什么必须转换 (MyClass*)
,或者这不是这里发生的事情?
最佳答案
马特·麦克纳布 (Matt McNabb) 和布赖恩·毕 (Brian Bi) 所说的,而且,这是为了您自己的利益™。您不应强制转换指针,而应将其保留为 void*
。这样,您就不会不小心将它用作目标类型而不先构造它(通过使用放置 new
)。例如,
void* p = ::operator new(sizeof (MyClass));
MyClass* pmc = new (p) MyClass;
关于c++ - 为什么 operator new 函数需要转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25717639/