C++常问问题
1.什么是内存泄漏?怎么有效检查程序的内存泄漏?
https://blog.csdn.net/weixin_41289588/article/details/88694305
简单地说就是申请了一块内存空间,使用完毕后没有释放掉。时间长了用尽内存,系统崩溃。函数申请了内存但是没有指针指向它,就会发生内存泄漏。
(1)良好的编程习惯,用完记得释放
(2)以指针链表进行管理
(3)Boost 中的smart pointer(智能指针?)
(4)常见的工具插件,如ccmalloc、Dmalloc、Leaky
2.malloc与new
https://blog.csdn.net/magic_world_wow/article/details/81370135
malloc(是函数)指定分配sizeof大小的内存空间,存放于堆中,使用完要用free来释放
new/delete是C++的运算符。它们都可用于申请动态内存和释放内存,动态申请的内存都存放在堆内存
栈内存是用来存放在函数中定义的一些基本类型的变量和对象的引用变量
一、预备知识—程序的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分
3.多态
多态
通俗的,一个事物有多种状态,在C++里是指一个基类和派生类的同名成员函数(虚函数),当基类指针指向派生类对象或者基类对象调用这个同名函数,有不同的结果。基类的指针操纵多个类型的能力被称为多态
多态分为静态多态和动态多态
静态多态是在编译期间完成,根据函数参数实参判断需要调用的函数。以此形成了函数重载技术和泛型编程。
动态多态则是利用虚函数实现了运行时的多态,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧。
(1)父类(基类)定义虚函数
(2)子类(派生类)要有虚函数的实现
(3)要有继承,子类继承父类
(4)要有父类(基类)指向子类的指针或者引用
4.函数重载,同名隐藏,重写
三个概念看起来很类似,都是对同名成员的处理。
重载:两个函数名相同,但是参数列表不同(个数,类型),返回值类型没有要求,在同一作用域中
重写:子类继承了父类,父类中的函数是虚函数,在子类中重新定义了这个虚函数,这种情况是重写
函数重载实现了在同一作用域内的同名函数根据不同的实参进行不同调用的技术。
同名隐藏是在继承体系中,派生类和基类有同名成员,使用就近原则的调用。