首页 / 面试 / 【个人纪录】C++面试总结之一(多态)
【个人纪录】C++面试总结之一(多态)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【个人纪录】C++面试总结之一(多态),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2400字,纯文字阅读大概需要4分钟。
内容图文
不严谨之处较多,欢迎大佬指正,在学习的路上不断狂奔
比如面试官问了一个多态问题,然后就可以针对多态这个问题适当展开,不至于问你一个就回答这一个问题,无法完全展示自己技能,适当的展开可以为面试加分哟
开始:
多态分为静态多态、动态多态。静态多态,重载,就是在同一作用域内,函数名相同,参数不同,根据参数来确定调用。动态多态,重写,主要是虚函数,父类指针指向子类对象,接着再用指针调用被重写函数。一个类有虚函数,就有虚函数表,虚函数表里存放的就是每个虚函数的地址,若子类未重写虚函数,那么虚函数表中的虚函数的地址就还是父类的虚函数的地址,一旦子类重写了,那么这个地址就会变成重写之后的虚函数的地址。
说到虚函数,如果 一个类要子类,那么它的析构函数一定要声明为虚函数,不然会造成内存泄漏,原因在于,如果父类的析构函数不是虚函数,那么在销毁对象时,只会调用父类析构函数,子类对象无法释放,导致内存泄露;如果父类析构函数是虚函数。那么在释放时,首先调用子类析构,使得子类对象得以释放,接着进入父类析构,释放父类对象,这样父类子类都得以完全释放。这就是为什么父类析构必须是虚函数的原因。
再讲到内存泄漏,内存泄漏是C++开发中比较容易出现的现象,往轻的说,一个项目运行速度及效率会降低,慢慢变卡,体验会急剧下降,严重的话可能会导致机器崩溃和死机,所以在开发过程中内存泄漏需要尤为重视。动态分配内存比较常用,比较容易出现未释放或者释放不完全的情况,也很难发现哪块造成内存泄漏了,可以通过一些内存泄漏检测工具来定位防止,这个后面讲。这里着重说一下C++令一个有效防止内存泄漏的方法—智能指针!
智能指针有自动指针、共享指针、唯一指针、弱指针。
若使用智能指针,则不需程序员自己释放,智能指针机制就是自动释放已申请的内存。auto_ptr在C++11当中虽然已标为弃用,但还可以用,在C++17中就完全移除了。原因在于auto_ptr在释放的时候使用delete而不使用delete[],这样就会造成内存泄漏,故不再使用。还有唯一指针、弱指针、共享指针。这里说一下比较重要的共享指针,只说核心:多个指针指向同一块内存,在这块内存上每多一个指针指向它,那么它的引用计数就会+1,在释放的时候,每释放一个指针,那么它的引用计数就会-1,直到它的引用计数减到0,才会得到完全释放。
通过检测工具来排查内存泄漏事件是一个非常有效的手段。上面提到了VLD内存泄漏检测工具,该工具运行起来后可直接在项目中看到那一块造成内存泄漏了,甚至可以具体看到哪一行有问题,定位出来之后可以针对性避免,可以大大提高产品的健硕性。
提到内存泄漏就难以不提到内存溢出,内存泄漏基本就是未释放或者释放不完全导致,那么内存溢出呢,举个很简单的例子:比如现在需要开辟10个字节的内存,但是系统只剩5个字节的大小了,这个时候就会造成内存溢出;再有就是数组溢出也是内存溢出的典型示例。这样就可以很清楚的搞明白泄漏和溢出是怎么回事了。
内容总结
以上是互联网集市为您收集整理的【个人纪录】C++面试总结之一(多态)全部内容,希望文章能够帮你解决【个人纪录】C++面试总结之一(多态)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。