我有以下情形:當異步回調調用虛函數,而基類構造函數尚未返回時會發生什麼?
class Caller{
public:
Caller() {...}
void register(Base* b) {...}
void callBase() { b->virt()}
};
class Base {
public:
Base(Caller c) { println("Base::Base()"); c.register(this); sleep(30); }
virtual void virt() { println("Base::virt()"); }
};
class Derived : public Base {
public:
Derived() { println("Derived::Derived()"); }
virtual void virt() { println("Derived::virt()"); }
};
我通常知道,如果有人呼籲派生類派生::的virt的virt()將被調用。但是在這裏,如果當Base在父構造函數中休眠時調用函數callBase,哪個函數將被調用? Base :: virt()或Derived :: virt()?
謝謝
[C++虛構函數來自構造函數]可能的重複(http://stackoverflow.com/questions/496440/c-virtual-function-from-constructor) – Lilshieste