如何重载operator new在内部工作?

时间:2016-01-17 11:17:42

标签: c++ polymorphism operator-overloading new-operator

如下面给出的示例,重载的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运算符吗?

1 个答案:

答案 0 :(得分:1)

当您编写new MyClass时,编译器知道您正在分配MyClass的实例并执行处理分配所需的任何操作,例如查找重载的{{ 1}}类中的运算符,并执行“类型转换”。

在重载的运算符函数中,知道在分配new对象时已经调用它。