Sto leggendo Effective C++ e sono imbattuto in questo esempio:Perché static_cast (* this) in una classe base crea una copia temporanea?
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
...
};
Il libro dice:
Quello che forse non si aspettano è che non richiama quella funzione sull'oggetto corrente ! Invece, il cast crea una nuova copia temporanea della parte della classe base di * this, quindi invoca onResize sulla copia!
Perché static_cast (codice precedente) crea una nuova copia? Perché non usare solo la parte della classe base dell'oggetto?
Se è stato lanciato su 'static_cast (* this). OnResize();', quindi penso che utilizzerebbe l'oggetto corrente. (Nota: '&'). Non sono sicuro però. –
static_cast (this) -> onResize(); dovrebbe funzionare ma ovviamente Window :: onResize(); è quello corretto qui. –
Trass3r