如下面给出的示例,重载的operator new返回void指针
void* Myclass::operator new(size_t size)
{
void *storage = malloc(size);
if(NULL == storage) {
throw "allocation fail : no free memory";
}
return storage;
}
但是我这样称呼MyClass *x = new MyClass;
。
所以问题是新操作符如何知道左侧哪种类型的指针。被类型化。
问题2:如果我写MyClass会发生什么* ptr = new Derived();?有必要在派生和基类中重载new运算符吗?
答案 0 :(得分:1)
当您编写new MyClass
时,编译器知道您正在分配MyClass
的实例并执行处理分配所需的任何操作,例如查找重载的{{ 1}}类中的运算符,并执行“类型转换”。
在重载的运算符函数中,知道在分配new
对象时已经调用它。