【C++】构造函数不能是虚函数
2015-08-24 13:21
302 查看
1 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。
2. 构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它。但析构却不一定,我们往往通过基类的指针来销毁对象。这时候如果析构函数不是虚函数,就不能正确识别对象类型从而不能正确调用析构函数。
参考资料:
1. http://blog.sina.com.cn/s/blog_620882f401016ri2.html
2. http://stackoverflow.com/questions/733360/why-do-we-not-have-a-virtual-constructor-in-c
相关文章推荐
- Item 8:析构函数不要抛出异常 Effective C++笔记
- Item 7:将多态基类的析构函数声明为虚函数 Effective C++笔记
- Item 6:禁用那些不需要的缺省方法 Effective C++笔记
- C++对象内存布局
- Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记
- 阿里巴巴2016校园招聘在线笔试(C/C++)附加题 第二题
- Machine Schedule
- 《算法导论》中求最大子数组的C++实现
- C++ Primer 5e chapter 15.1
- [C++]Reverse Integer整数翻转
- c++程序的内存布局
- C++ STL
- C++ Tips: 在控制台中显示中文
- 详解C语言中index()函数和rindex()函数的用法
- 在C语言中比较两个字符串是否相等的方法
- 【C++】不要在构造函数或析构函数内调用虚函数
- 在C++代码中调用L脚本语言
- [C++]Excel Sheet Column Title
- C语言中查找字符在字符串中出现的位置的方法
- C语言中strspn()函数和strcspn()函数的对比使用