fre*_*low 14
你operator new对new运营商感到困惑.operator new只需分配原始内存并返回一个void*,new T然后在分配后调用构造函数并返回一个T*.
此外,您必须使用mallocC++转换结果,因为与C不同,C++不允许从void*其他指针类型进行隐式转换.请注意,void*在C++中很少使用.
在C++中,内存位置确实是通过void指针来表达的。但内存与对象不同。对象需要内存才能生存,但该对象与其所在的内存不同。
您需要在内存中创建一个对象。如果愿意,new-运算符可以在内存和对象之间“转换”:
#include <cstdlib>
void * pm = std::malloc(sizeof(int)); // C-style
void * qm = ::operator new(sizeof(int)); // C++-style
int * po = ::new (pm) int(10); // void pointer goes in...
int * qo = ::new (qm) int(20); // ...object pointer comes out.
// (... class-type objects would need to be destroyed...)
std::free(pm);
::operator delete(qm);
Run Code Online (Sandbox Code Playgroud)