赞
踩
这两天有点忙耽搁了,抱歉!!!
这个博客系列会分为C++ STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新,基本涵盖了自己秋招历程被问过的面试内容(除了实习和学校项目相关的具体细节)。在知乎和牛客(牛客上某些文章上会附上内推码)也会同步更新,全网同号(lonely-stone或者lonely_stone)。
关于高频面试题和C++ STL面经,每次我会更新10个问题左右,每次更新过多,害怕大家可能看了就只记住其中几个点。(在个人秋招面试过程中,面试到后面,发现除了个人项目和实习经历外,个人所记录的内容基本能涵盖面试官能问到的)
(另外个人才疏学浅,如果所分享知识中出现错误,请大家指出,避免误导其他人)
防止内存泄漏。想去借助父类指针销毁子类对象的时候,不能去销毁子类对象。假如没有虚析构函数,释放一个由基类指针指向的派生类对象时,不会触发动态绑定,则只会调用基类的析构函数,不会调用派生类的。派生类中申请的空间则得不到释放导致内存泄漏。
为什么析构函数必须是虚函数?为什么c++默认的析构函数不是虚函数?
首先整理一下虚函数表的特征:
根据以上特征,虚函数表类似于类中静态成员变量,静态成员变量也是全局共享,大小确定,因此最有有可能存储在全局数据区。
虚函数表vtabel在Linux/Unix中存放在可执行文件的制度数据段中(rodata),这与微软的编译器将虚函数表存放在常量段存在一些区别
由于虚表指针vptr跟虚函数密不可分,对于有虚函数或者继承于虚函数的基类,对该类进行实例化时,在构造函数执行时会对虚表指针进行初始化,并且存放在对象内存布局的最前面。
在 C++ 中,当一个类具有虚函数时,编译器会为该类创建虚表。
虚表是一个指针数组,其中的每个元素都是一个函数指针,指向该类的虚函数的实现。在类的对象被创建时,会为其分配一个虚函数指针,该指针指向该类的虚表。当调用虚函数时,程序会根据虚函数指针查找虚表,从而找到对应的函数实现。
因此,虚表数量就是一个类中虚函数的数量。对于一个类来说,虚表数量可能是0,也可能是多个。对于一个继承关系中的每个类,都可能有自己的虚表。
多线程则是多任务的一种实现方式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。