C++类的构造函数不能为虚函数的原因
来源:互联网 发布:ubuntu接口配置ip地址 编辑:程序博客网 时间:2024/06/05 14:36
1 C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化;
我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的;
那么问题来了,如果构造函数为虚函数,此时的内存是一片空白,不存在该虚函数表vtable,那么无法找到该构造函数;
所以说,构造函数不能为虚函数。
2 此外,如果有以下代码:
class A{ A() {}};class B: public A{ B():A() {}};int main(){ B b; B *pb = &b;}
则构造B类的时候,构造函数执行顺序是:
A() B()
根据虚函数的性质,如果A的构造函数为虚函数,且B类也给出了构造函数,则应该只执行B类的构造函数,不再执行A类的构造函数,这样A就无法构造了,产生了矛盾;
因此,构造函数不能为虚函数。
对于析构函数而言,可以为虚函数,因为此时虚函数表早已建立;并且,常常析构函数都是虚函数。原因就是,通过基类指针在销毁对象的时候,可以正确的识别要销毁对象的类型,从而防止析构不完全的出现。
0 0
- 构造函数不能声明为虚函数的原因是:
- 构造函数不能声明为虚函数的原因是:
- c++中构造函数不能为虚函数的原因
- C++类的构造函数不能为虚函数的原因
- c++ 构造函数不能声明为虚函数的原因及分析
- C/C++—— C++中构造函数不能是虚函数的原因分析
- 构造函数不能是虚函数的原因
- 构造函数为什么不能是虚函数的原因
- 构造函数不能是虚函数的原因
- 构造函数不能是虚函数的原因
- 构造函数不能为虚函数,虚析构函数的作用
- C++中为什么构造函数不能为虚函数原因
- C++中为什么构造函数不能为虚函数原因
- inline内联函数不能为virtual虚函数的原因
- 构造函数不能为虚函数的理由
- 构造函数为什么不能为虚函数 & 基类的析构函数为什么要为虚函数
- 【c++】不能被声明为虚函数的C++函数
- 构造函数不能声明为虚函数
- CDC * pdc 指针 与 hdc 转换
- 关于MFC中WM_MOUSEHOVER和WM_MOUSELEAVE消息的使用
- MFC无标题栏对话框移动的处理方法
- MFC下在利用控制台输入输出 方便调试
- Merge Two Sorted Lists, 合并两个有序链表
- C++类的构造函数不能为虚函数的原因
- leetcode 二叉树前序遍历的递归和非递归实现
- leetcode 二叉树中序遍历的递归和非递归实现
- leetcode 二叉树后续遍历的递归和非递归实现
- C++中的虚函数、纯虚函数
- 使用CSS改变表格边框样式
- 线程池原理及创建(C++实现)
- Java 垃圾回收
- 缓存框架OSCache部分源码分析