析构函数(destructor)是在类对象销毁时自动调用的特殊成员函数。它的主要作用是释放对象的资源,如堆内存、文件、网络连接等。析构函数的特点是:
1. 析构函数名称与类名相同,前面加~。如~MyClass()。
2. 析构函数没有返回类型。
3. 析构函数可以重载,但不能有参数。
4. 一个类中只能有一个析构函数。
5. 析构函数是由系统自动调用的,程序员不能直接调用。
简单来说并不是所有的情况都需要在类中定义析构函数的,只有当在类中申请了资源的情况下才需要在最后定义析构函数。
比如上面的代码没有申请任何资源所以不需要定义析构函数,而下面的代码定义了一个name的内存,使用后需要用析构函数释放内存。
另外说一下内存泄漏,内存泄漏的是指程序中申请过的空间没有得到正确的释放,从而造成了内存空间不能被正常回收利用的问题。
内存泄漏的后果就是电脑内存一直在被占用,资源得不到释放导致程序运行变慢甚至崩溃。
发生内存泄漏的主要原因有:
堆内存分配后没有得到正确的释放,简单说一下堆内存和stack内存,占(stack)内存是由编译器或系统自动分配的,他的响应速度快,但是内存空间小,往往不会产生泄漏问题,而堆内存是程序员自己定义的内存,比如在定义一个新的对象时,new操作符会申请出一些堆空间,这样的空间不会被系统自动释放,需要程序员手动释放,这也是发生内存泄漏的主要原因。
其次还有可能是全局变量没有使用,或者是对一个变量重复进行释放等等。