- 我们使用虚函数的目的是为了动态联编,但是在构造函数和析构函数中使用虚函数是无法达到此目的的。因为无论是在构造函数还是析构函数中调用虚函数,那么都是会进行实调用而非需调用,可以将此构造和析构的过程理解成一个栈,无论是在进行构造还是析构的过程中当需要运行基类的构造或者析构函数中的虚函数的时候,都是在栈底,而派生类的成员都是没有的(不是没有初始化就是已经被析构)。
- 大多数编译器会在违反此条例的时候报错,但是假如我们在构造函数或析构函数中调用了普通函数a,而a又调用了虚函数b,编译器就会无动于衷,而这种情况会间接违反此条例,造成的危害是等价的。
- 构造函数负责构造‘虚指针’来进行虚函数的调用。
- 假如真的需要在构造函数期间得知派生类的信息,那么可以使用从派生类传递参数到基类的方式来进行。
条款09:绝不在构造和析构过程中调用virtual函数
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 《Effective C++ 中文版 第三版[https://book.douban.com/subject/18...
- 1. 析构函数和虚析构函数 如果基类的析构函数是虚的,那么它的派生类的析构函数都是虚的 这将导致:当派生类析构的时...