虚析构函数和构造函数面试中的几个…
来源:互联网 发布:海岛奇兵攻略软件 编辑:程序博客网 时间:2024/06/03 18:17
1.为什么有时要把析构函数变为虚函数 当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。 虚函数表是属于整个类的,其存储位置跟编译器有关,微软编译器的存储位置为常量段,linux下的编译器在只读数据段。
答:这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。
2.为什么构造函数不能是虚函数
答:(1)虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,将无法进行,故构造函数不能是虚函数
3.虚指针和虚函数表分别存储在哪个区域
答:虚指针是属于对象的,在对象的内存空间中,一般是对象的前4个字节
- 虚析构函数和构造函数面试中的几个…
- 关于“构造函数”中的几个小问题,也许面试会问到哦~
- 关于“构造函数”中的几个小问题,也许面试会问到哦~
- C++中的构造函数,拷贝构造函数和赋值运算
- 构造函数中的类型转化和反构造函数
- c++中的构造函数和拷贝构造函数
- C++中的构造函数,拷贝构造函数和赋值运算
- 构造函数和析构函数中的虚函数调用
- 构造函数和析构函数中的虚函数调用
- 构造函数和析构函数中的虚函数
- 构造函数和析构函数中的虚函数
- C++面试之 类string的构造函数、拷贝构造函数和析构函数
- 关于JavaScript中的构造函数和对象中的构造属性
- ruby中的构造函数和继承
- C++类中的变量和构造函数
- js中的对象和构造函数
- JavaScript中的工厂模式和构造函数
- c++中的引用和拷贝构造函数
- C++语言中类的成员变量初始化(转…
- C++电话面试
- 嵌入式面试题(转)
- 程序员面试宝典
- 上海摩高投资笔试
- 虚析构函数和构造函数面试中的几个…
- 基于CTP的程序化交易系统开…
- JavaScript之数据类型
- Lua FFI 实战
- VC环境下UDP Socket编程示例
- c/c++通过socket发送结构体
- 字节对齐(强制对齐以及自然对齐)
- 字节对齐(强制对齐以及自然对齐)
- C++--深入分析MFC文档视图结构(项…