- 在构造和析构期间不要调用 virtual 函数,因为这类调用从不下降至 derived class(比起当前执行构造函数和析构函数的那层)
语法上可以调用。但是实际上你不应该这么做,因为这会违反你的预期。在构造函数和析构函数中调用虚函数,调用的始终是基类的虚函数,不能达到多态的效果。
因为在派生类对象的 base class 构造期间,对象的类型是 base class 而不是 derived class 。
#includeusing namespace std; class base { public: base() { f(); } virtual void f() { cout << "base::f()n"; } }; class Derived : public base { public: Derived() {} virtual void f() { cout << "Derived::f()n"; } }; int main() { base b; Derived d; system("pause"); return 0; }
输出:
base::f() base::f()


![[Effective C++]条款09:绝不在构造和析构过程中调用 virtual 函数 [Effective C++]条款09:绝不在构造和析构过程中调用 virtual 函数](http://www.mshxw.com/aiimages/31/353093.png)
