target
= элемент, который вызвал событие.
currentTarget
= элемент, который прослушивает событие.
Поскольку этот код просит создать новый объект. Этот код хочет сделать объект Window
из *this
- это можно сделать с помощью конструктора копирования в Window
.
Вместо этого вы хотите:
static_cast<Window&>(*this).onResize();
// ^
// note the &
Это означает, что я хочу сделать Window&
из *this
- это неявное преобразование из [] [] [*this
) [SpecialWindow&
) к Window&
.
Однако лучше всего вызвать определенную версию функции-члена onResize()
, которую вы хотите вызвать:
Window::onResize(); // equivalent to this->Window::onResize();
Это потому, что код отличает значение Window
вместо ссылки Window&
. Согласно стандарту эта форма литья эквивалентна вызову (C ++ 11 §5.2.9 / 4 = C ++ 03 §5.2.9 / 2)
Window __t (*this);
__t.onResize();
, который вызывает копию -constructor Window
и выполняет onResize на этой копии.
(Правильный способ вызова метода суперкласса -
Window::onResize();
)
Поскольку вы выполняете фактический объект, а не указатель или ссылку. Точно так же при нажатии double
на int
создается новый int
- не повторное использование части double
.
Контраст:
static_cast<Window>(*this)
с:
static_cast<Window&>(*this)
Один вызывает конструктор копирования, другой - нет. Это помогает?