博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NO.8:绝不在构造或者析构过程中调用virtual函数
阅读量:7022 次
发布时间:2019-06-28

本文共 806 字,大约阅读时间需要 2 分钟。

在构造和析构执行期间不要调用virtual函数,因为这类调用从不会下降至derived class(比起当前执行构造函数和析构函数)

如果在base class 构造函数或者析构函数调用virtual,derived class构造时会先构造base class,则base class中的virtual实际调用是base class的;

 

第一种解释:derived class类先执行构造base class部分,然而在base class构造过程中,derived class部分是为初始化的,如果base class调用的virtual是derived clas则会发生可怕的错误,所以C++不允许,C++让virtual吊桶base class的.

 

第二种解释(不算解释):构造/析构base class期间,virtual不是virtual(非正规说法)

 

第三种解释(根本原因):在derived class构造base class期间,对象的类型是base class而不是derived class. 这些virtual会被正确 (resolv to),且RRTI类型检测也会认为是base class,因为C++ 认为derived class部分未被初始化,所以面对它们,C++最安全的做法是视它们不存在

 

1 #include 
2 3 4 class Base 5 { 6 public: 7 Base() 8 { 9 Show();10 }11 virtual void Show()12 {13 std::cout<<"Base Show()"<

 

转载于:https://www.cnblogs.com/xuaidongstdudyrecording/p/7259784.html

你可能感兴趣的文章