2016-01-17 4 views
0

В примере, приведенном ниже, перегруженный оператор нового возвращается пустой указательКак работает перегруженный оператор new?

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() ;? необходимо перегрузить новый оператор как в производном, так и в базовом классе?

+0

Оператор не должен знать, компилятор добавит дополнительный код для вызова конструктора класса и назначит указатель. –

ответ

1

Когда вы пишете new MyClass то компилятор знает вы направляете экземпляр MyClass и делать все, что необходимо для обработки выделения, как глядя перегруженного new оператора в классе, и делать «тип литье».

И в перегруженной функции оператора вы знаете, что это было вызвано при распределении объекта MyClass.

Смежные вопросы