《Effective C++》不要在构造函数和析构函数中调用虚函数
来源:互联网 发布:会锁机的软件下载 编辑:程序博客网 时间:2024/04/29 21:10
#include <iostream.h> class BASE { public: BASE() { myPrint(); } ~BASE() { myRelease(); } protected: virtual void myPrint(){cout<<"Base"<<endl;} virtual void myRelease(){cout<<"Base Release"<<endl;} }; class DERIVED:public BASE { protected: void myPrint(){cout<<"Derived"<<endl;} void myRelease(){cout<<"Derived Release"<<endl;} }; void main() { DERIVED d; }
运行:
可以看到,定义继承类对象的时候,基类构造函数和析构函数中调用的虚函数是并非是继承类的成员函数。
在构造期间,首先构造基类部分,此时继承类成员变量尚未初始化,如果允许调用子类虚函数,而子类成员函数很有可能要调用子类成员变量,为了避免使用未初始化的成员变量,C++拒绝在构造函数中调用子类重载的虚函数。
析构期间也是这样,子类先析构,此时子类成员变量再次呈现未初始化,所以析构函数中仍然拒绝调用子类重载的虚函数。
所以:在构造和析构期间不要调用虚函数。包括直接调用和间接调用。
- 《Effective C++》不要在构造函数和析构函数中调用虚函数
- 【effective C++】不要在构造函数或析构函数内调用虚函数
- C++之构造函数和析构函数中不要调用virtual函数(9)---《Effective C++》
- 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- C++ 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- 不要在构造函数和析构函数中调用虚函数
- C++不要在构造函数和析构函数中调用虚函数
- C++学习笔记-----不要在构造函数和析构函数中调用虚函数
- <Effective C++> Item 9:绝不在构造和析构过程中调用虚函数
- Effective C++ 条款09 绝不在构造和析构函数中调用虚函数
- Effective C++ Item 09-绝不在构造函数和析构函数中调用virtual函数
- Effective C++:条款09:绝不在构造和析构过程中调用virtual函数
- 读书笔记《Effective C++》条款09:绝不在构造和析构过程中调用virtual函数
- 9绝对不要在构造函数和析构函数中调用virtual函数
- C++不要在构造函数和析构函数中调用virtual函数的原因
- Item 9:在析构/构造时不要调用虚函数 Effective C++笔记
- c++使用技巧: 不要在构造函数/析构函数中调用虚函数
- 判断邮箱是否合法
- HTML中为何P标签内不可包含DIV标签
- Android中Bitmap和Drawable
- MySQL数据库优化总结
- IOS NSString 截取,objectAtIndex,rangeOfString,stringWithContentsOfFile,NSEnumerator
- 《Effective C++》不要在构造函数和析构函数中调用虚函数
- 《Java数据结构和算法》第二版 Robert lafore 编程作业 第三章
- 推荐一系列优秀的Android开发源码
- HTTP协议详解
- Unity3d-Texture2D.ReadPixels
- Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法
- DB2基本命令
- GridView的基本使用方法
- Vaadin Web应用开发教程(31):UI布局-FormLayout布局