内存泄漏问题
内存泄漏:应用程序分配某段内存后,因为设计错误,导致失去了对这段内存的控制。
危害:长期运行的程序,如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,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类)。
抽象类:
抽象类不能实例化出对象,派生类继承抽象类后,必须重写纯虚函数后才能实例化出对象。
4617

被折叠的 条评论
为什么被折叠?



