关于c ++:对派生对象中的“this”指针使用static_cast到基类的问题

Question of using static_cast on “this” pointer in a derived object to base class

这是从有效的C++ 3ED中获取的一个例子,它表示如果使用EDCOX1(0),则复制对象的基部,并从该部分调用该调用。我想知道引擎盖下面发生了什么,有人能帮忙吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
};


这是:

1
static_cast<Window>(*this).onResize();

实际上与此相同:

1
2
3
4
{
    Window w = *this;
    w.onResize();
}   // w.~Window() is called to destroy 'w'

第一行创建由this指向的SpecialWindow对象的Window基类子对象的副本。第二行在该副本上调用onResize()

这一点很重要:对于this所指的对象,您从不调用Window::onResize();对于您创建的this副本,您调用Window::onResize()。你复制后,this指向的物体不会被触碰。

如果您想在this指向的对象上调用Window::onResize(),可以这样做:

1
Window::onResize();


为什么要铸造?如果要调用window的onResize(),请执行此操作,

1
Window::onResize(); //self-explanatory!

好吧,你也可以这样做,也可以使用静态投射,但是你必须这样做,

1
2
   static_cast<Window&>(*this).onResize();
    //note '&' here  ^^