【C++面经】6-10

内存泄漏问题

内存泄漏:应用程序分配某段内存后,因为设计错误,导致失去了对这段内存的控制。

危害:长期运行的程序,如OS,后台服务等,会导致响应越来越慢,最终卡死。

内存泄漏的分类

堆内存泄漏:

通过malloc、realloc、calloc、new等从堆上申请空间,但用完后未释放,从而造成内存泄漏。

系统资源泄漏:

程序使用系统分配的资源,比如:套接字、文件描述符、管道等,但用完后没有释放,从而造成系统资源的浪费。

如何避免内存泄漏

事前预防型:

养成良好的代码规范,申请的内存空间记得去释放。

采用RAII思想和智能指针来管理资源。

事后查错型:

出现内存泄漏:使用内存泄漏工具进行检测。

vector的迭代器失效问题

迭代器失效,实际就是迭代器底层对应的指针所指向的空间失效了,如果继续使用已经失效的迭代器,程序可能会崩溃。

可能引发迭代器失效的操作:

(1)引起底层空间改变都有可能让迭代器失效,resize,reserve,insert,push_back等。

(2)Erase:删除一个元素,后面的元素往前移动,这没什么问题。但如果删除的是最后一个位置,pos就会指向end,而end位置没有元素,此时将迭代器向后移动或解引用就会引发问题。

避免迭代器失效:

在insert/erase一个pos位置后,默认已经失效,不要再使用它,或在使用前重新赋值。

谈谈对多态的理解

多态的定义:在继承体系中,不同对象调用同一函数,表现出不同结果。

多态的条件:

1.派生类对基类的虚函数完成重写。

2.通过基类的指针或引用调用虚函数。

谈谈对函数覆盖(重写)的理解

在派生类中有一个和基类完全相同的虚函数(返回值、函数名、参数列表都相同),则称子类的虚函数重写了基类的虚函数(子类的virtual可省)。但虚函数重写有两个特例:

1.返回值可以不同,基类的虚函数可返回基类对象的指针或引用。子类的虚函数可返回子类对象的指针或引用。这里返回的基类和子类可以是其他继承体系中的。

2.虽然基类与派生类析构函数不同,但派生类的析构函数也可以重写基类的析构函数。因为编译器为了能让派生类的析构重写基类的析构,在编译后,析构函数的名字统一被处理为destructor()

当final修饰类时,该类不可被继承

override:

检查派生类虚函数是否重写了基类的某个虚函数,若没有完成重写,编译报错。

什么是纯虚函数&什么是抽象类

纯虚函数:

在虚函数后面写上=0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类)。

抽象类:

抽象类不能实例化出对象,派生类继承抽象类后,必须重写纯虚函数后才能实例化出对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崽崽..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值