c++ - 为什么 operator new 函数需要转换

标签 c++ new-operator

所以这条语句分配了内存但是没有调用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/

相关文章:

c++运算符重载=在visual studio中运行不佳但在eclipse CDT中运行

c++ - 在 C++ 中分配内存而不初始化它

c++ - exec() 中的 Qt 段错误

c++ - GNE 的几个错误

c++ - 如何在模板化转换运算符中消除这种构造的歧义?

c++ - 删除多维矩阵时出错

c++ - 调用 free() 或 delete 而不是 delete[] 有什么危险吗?

c++ - 当我尝试进行 TPC-E 测试时,Make 实用程序提示 "undefined reference"

c++ - 尝试删除字符数组时崩溃

c - 新建和删除运算符(operator)?