estoy leyendo efectiva C++ y me encontré con este ejemplo:¿Por qué static_cast (* this) a una clase base crea una copia temporal?
class Window { // base class
public:
virtual void onResize() { ... } // base onResize impl
...
};
class SpecialWindow: public Window { // derived class
public:
virtual void onResize() { // derived onResize impl;
static_cast<Window>(*this).onResize(); // cast *this to Window,
// then call its onResize;
// this doesn't work!
... // do SpecialWindow-
} // specific stuff
...
};
El libro dice:
Lo que no puede esperar es que no invoca esa función en el objeto actual ! En cambio, el elenco crea una copia nueva y temporal de la parte de la clase base de * this, luego invoca onResize en la copia.
¿Por qué static_cast (código anterior) crea una nueva copia? ¿Por qué no simplemente usar la parte de la clase base del objeto?
Si fue lanzado a 'static_cast (* this) .onResize();', entonces creo que usaría el objeto actual. (Tenga en cuenta el 'y'). Aunque no estoy seguro –
static_cast (esto) -> onResize(); también debería funcionar, pero por supuesto Window :: onResize(); es el correcto aquí. –
Trass3r