【个人纪录】C++面试总结之一(多态)
不严谨之处较多,欢迎大佬指正,在学习的路上不断狂奔
比如面试官问了一个多态问题,然后就可以针对多态这个问题适当展开,不至于问你一个就回答这一个问题,无法完全展示自己技能,适当的展开可以为面试加分哟
开始:
多态分为静态多态、动态多态。静态多态,重载,就是在同一作用域内,函数名相同,参数不同,根据参数来确定调用。动态多态,重写,主要是虚函数,父类指针指向子类对象,接着再用指针调用被重写函数。一个类有虚函数,就有虚函数表,虚函数表里存放的就是每个虚函数的地址,若子类未重写虚函数,那么虚函数表中的虚函数的地址就还是父类的虚函数的地址,一旦子类重写了,那么这个地址就会变成重写之后的虚函数的地址。
说到虚函数,如果 一个类要子类,那么它的析构函数一定要声明为虚函数,不然会造成内存泄漏,原因在于,如果父类的析构函数不是虚函数,那么在销毁对象时,只会调用父类析构函数,子类对象无法释放,导致内存泄露;如果父类析构函数是虚函数。那么在释放时,首先调用子类析构,使得子类对象得以释放,接着进入父类析构,释放父类对象,这样父类子类都得以完全释放。这就是为什么父类析构必须是虚函数的原因。
再讲到内存泄漏,内存泄漏是C++开发中比较容易出现的现象,往轻的说,一个项目运行速度及效率会降低,慢慢变卡,体验会急剧下降,严重的话可能会导致机器崩溃和死机,所以在开发过程中内存泄漏需要尤为重视。动态分配内存比较常用,比较容易出现未释放或者释放不完全的情况,也很难发现哪块造成内存泄漏了,可以通过一些内存泄漏检测工具来定位防止,这个后面讲。这里着重说一下C++令一个有效防止内存泄漏的方法—智能指针!
智能指针有自动指针、共享指针、唯一指针、弱指针。
若使用智能指针,则不需程序员自己释放,智能指针机制就是自动释放已申请的内存。auto_ptr在C++11当中虽然已标为弃用,但还可以用,在C++17中就完全移除了。原因在于auto_ptr在释放的时候使用delete而不使用delete[],这样就会造成内存泄漏,故不再使用。还有唯一指针、弱指针、共享指针。这里说一下比较重要的共享指针,只说核心:多个指针指向同一块内存,在这块内存上每多一个指针指向它,那么它的引用计数就会+1,在释放的时候,每释放一个指针,那么它的引用计数就会-1,直到它的引用计数减到0,才会得到完全释放。
通过检测工具来排查内存泄漏事件是一个非常有效的手段。上面提到了VLD内存泄漏检测工具,该工具运行起来后可直接在项目中看到那一块造成内存泄漏了,甚至可以具体看到哪一行有问题,定位出来之后可以针对性避免,可以大大提高产品的健硕性。
提到内存泄漏就难以不提到内存溢出,内存泄漏基本就是未释放或者释放不完全导致,那么内存溢出呢,举个很简单的例子:比如现在需要开辟10个字节的内存,但是系统只剩5个字节的大小了,这个时候就会造成内存溢出;再有就是数组溢出也是内存溢出的典型示例。这样就可以很清楚的搞明白泄漏和溢出是怎么回事了。
- C++多态个人总结
- C/C++面试/笔试问题个人总结
- C++ 多态的实现原理面试知识点总结
- 黑马程序员--Java基础加强--02.代码简化 书写规律I_原始数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】
- C++笔试总结-面试笔试常考题型(一)指针-引用-宏定义-sizeof
- 二分算法个人总结c++
- C++封装继承多态总结
- C++面试知识点总结
- C++笔试面试总结
- 面试总结之C++中const用法
- 腾讯T3C++开发工程师面试总结,这些问题你能答上几个?含答案
- C++面试总结(三)模板与泛型编程
- 对C/C++面试中遇到的++,--的总结(让面试官死去吧)
- 史上最全的C++/游戏开发面试问题总结(二)——虚函数,内存,STL
- 面了13家互联网公司后(阿里/美团/京东等),总结了这些面试重点+必备试题+个人心态,希望能帮助到你!
- C++多态总结:多态原理、虚函数指针、重载重写 ,赋值兼容性原则
- C++面试常见问题总结(四)(本人面试遇到的问题记录,作为学习和交流用)
- C、C++、C#面试总结
- c++服务器编程面试总结
- Java集合常见面试问题和答案(转+个人总结)