2011-03-23 19 views
19

Cuando sobrecargamos un nuevo operador de una clase, declaramos la función como una función miembro. Por ejemplo:Operador sobrecarga nuevo para una clase

class OpNew { 
public: 
    OpNew() { cout << "OpNew::OpNew()" << endl;} 
    void* operator new(size_t sz) { 
     cout << "OpNew::new: " 
      << sz << " bytes" << endl; 
     return ::new char[sz]; 
    } 
}; 

¿Cómo funciona el comunicado OpNew *obj = new OpNew bajo el capó? ya que el nuevo sobrecargado es miembro de la clase OpNew, no es estático. Entonces, ¿cómo garantiza el compilador que esta llamada a la función de miembro new tenga éxito?

+2

It * debe * ser estático. –

+0

Espero que haya sobrecargado 'operator delete' también, de lo contrario tendrá un comportamiento indefinido. – sharptooth

+0

Por supuesto que sí, eso fue solo un fragmento :) –

Respuesta