我读有效的C++和整个这个例子就是:为什么static_cast(* this)给基类创建一个临时副本?
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(上面的代码)创建一个新的副本?为什么不只是使用对象的基类部分?
如果它被转换为'static_cast(* this).onResize();',那么我认为它会使用当前对象。 (注意'&')。但不知道。 –
2012-01-31 18:26:48
static_cast(this) - > onResize(); 也应该工作,但当然是 Window :: onResize(); 在这里是正确的。 –
Trass3r
2013-03-08 14:27:14