【我的纪录】C++面试总结之一(多态)

不严谨之处较多,欢迎大佬指正,在学习的路上不断狂奔
好比面试官问了一个多态问题,而后就能够针对多态这个问题适当展开,不至于问你一个就回答这一个问题,没法彻底展现本身技能,适当的展开能够为面试加分哟
开始:
多态分为静态多态、动态多态。静态多态,重载,就是在同一做用域内,函数名相同,参数不一样,根据参数来肯定调用。动态多态,重写,主要是虚函数,父类指针指向子类对象,接着再用指针调用被重写函数。一个类有虚函数,就有虚函数表,虚函数表里存放的就是每一个虚函数的地址,若子类未重写虚函数,那么虚函数表中的虚函数的地址就仍是父类的虚函数的地址,一旦子类重写了,那么这个地址就会变成重写以后的虚函数的地址。
说到虚函数,若是 一个类要子类,那么它的析构函数必定要声明为虚函数,否则会形成内存泄漏,缘由在于,若是父类的析构函数不是虚函数,那么在销毁对象时,只会调用父类析构函数,子类对象没法释放,致使内存泄露;若是父类析构函数是虚函数。那么在释放时,首先调用子类析构,使得子类对象得以释放,接着进入父类析构,释放父类对象,这样父类子类都得以彻底释放。这就是为何父类析构必须是虚函数的缘由。
再讲到内存泄漏,内存泄漏是C++开发中比较容易出现的现象,往轻的说,一个项目运行速度及效率会下降,慢慢变卡,体验会急剧降低,严重的话可能会致使机器崩溃和死机,因此在开发过程当中内存泄漏须要尤其重视。动态分配内存比较经常使用,比较容易出现未释放或者释放不彻底的状况,也很难发现哪块形成内存泄漏了,能够经过一些内存泄漏检测工具来定位防止,这个后面讲。这里着重说一下C++令一个有效防止内存泄漏的方法—智能指针!
智能指针有自动指针、共享指针、惟一指针、弱指针。
若使用智能指针,则不需程序员本身释放,智能指针机制就是自动释放已申请的内存。auto_ptr在C++11当中虽然已标为弃用,但还能够用,在C++17中就彻底移除了。缘由在于auto_ptr在释放的时候使用delete而不使用delete[],这样就会形成内存泄漏,故再也不使用。还有惟一指针、弱指针、共享指针。这里说一下比较重要的共享指针,只说核心:多个指针指向同一块内存,在这块内存上每多一个指针指向它,那么它的引用计数就会+1,在释放的时候,每释放一个指针,那么它的引用计数就会-1,直到它的引用计数减到0,才会获得彻底释放。
经过检测工具来排查内存泄漏事件是一个很是有效的手段。上面提到了VLD内存泄漏检测工具,该工具运行起来后可直接在项目中看到那一块形成内存泄漏了,甚至能够具体看到哪一行有问题,定位出来以后能够针对性避免,能够大大提升产品的健硕性。
提到内存泄漏就难以不提到内存溢出,内存泄漏基本就是未释放或者释放不彻底致使,那么内存溢出呢,举个很简单的例子:好比如今须要开辟10个字节的内存,可是系统只剩5个字节的大小了,这个时候就会形成内存溢出;再有就是数组溢出也是内存溢出的典型示例。这样就能够很清楚的搞明白泄漏和溢出是怎么回事了。程序员

相关文章
相关标签/搜索