构造函数,析构函数与virtual
来源:互联网 发布:外汇行情数据分析 编辑:程序博客网 时间:2024/06/05 06:33
在C++中,构造函数是不允许被声明为虚函数的,会报错。
原因是:
1。构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功,编译器无法知道对象的实际类型,是该类本身,还是该类的一个派生类,或是更深层次的派生类。无法确定。
2。 虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初 始化,将无法进行。
析构函数为什么声明为虚函数?
如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。
阅读全文
0 0
- 构造函数,析构函数与virtual
- C++构造与析构(16) - virtual构造函数
- C++构造与析构(17) - virtual拷贝构造函数
- virtual与构造/析构函数(内联函数,构造函数,静态成员函数不能为virtual函数)
- C++ 构造函数和析构函数与virtual关键字
- 再说构造与析构,virtual析构函数
- 绝不能在构造函数与析构函数中调用virtual 函数
- 绝不能在构造函数与析构函数中调用virtual 函数
- 构造函数、析构函数等和virtual函数
- 构造、析构函数可否为virtual
- 构造、析构函数可否为virtual
- virtual应用于构造函数和析构函数的用途
- 构造函数的执行与virtual
- 在构造和析构期间不要调用virtual函数
- 析构函数virtual与非virtual区别
- 析构函数virtual与非virtual区别
- 关于virtual与非virtual析构函数的区别
- 析构函数virtual与非virtual区别
- 指针及数组深度解析
- flow.js/typescript 这类定义参数类型的意义何在
- 漫谈Hadoop的思想之源:Google
- 存储过程调试
- 谈谈数据库的ACID
- 构造函数,析构函数与virtual
- [转载整理]计算机视觉及机器学习牛人和资料
- MVP实现二级购物车
- java 公用的解析json的方式,将json转换成集合的模式存放
- ejabberd源码分析《一》application启动
- iOS 自定义tabbar中间按钮 超简单方法
- OPP :面向对象编程,深入理解类class
- java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMerger
- Greendao+多线程断点续传