1、什么是内存泄漏
内存泄漏 (memory leak) 是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
2、什么操作会导致内存泄漏
指针指向改变,未释放动态分配内存
2.1、堆内存泄漏
堆内存指的是程序运行中根据需要分配通过 malloc , new 等从堆上分配的一块内存,再然后必须通过调用 free 和 delete 删掉。如果程序设计错误导致这块内存没有被释放,那么此后这一块内存将不会被使用,导致 Heap leak。
2.2、系统资源泄露
主要指程序使用系统分配的资源比如 Bitmap , handle , socket(使用close()函数释放) 等没有使用相应的函数释放掉,导致系统资源的浪费。
2.3、没有将基类的析构函数定义为虚函数
当基类指针指向子类对象时,如果基类的析构函数不是 virtual,那么子类的析构函数将不会被调用,子类的资源没有正确是释放,因此造成内存泄露。
3、如何防止内存泄露
- 将内存的分配封装到类中,构造函数分配内存,析构函数释放内存
- 使用智能指针
- 将基类的析构函数定义为虚函数