Почему static_cast (* this) to базовый класс создает временную копию?

Я читал Эффективный C ++ и наткнулся на этот пример:

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

  ...

};

В книге говорится:

Чего вы могли не ожидать, так это того, что она не вызывает эту функцию на текущий объект! Вместо этого приведение создает новую временную копию части базового класса * this, а затем вызывает onResize для этой копии!

Почему static_cast (код выше) создает новую копию? Почему бы просто не использовать часть объекта базового класса?

20
задан Rob Kennedy 31 January 2012 в 18:31
поделиться