c++之到底什么时候需要加入析构函数定义?以及内存泄漏

析构函数(destructor)是在类对象销毁时自动调用的特殊成员函数。它的主要作用是释放对象的资源,如堆内存、文件、网络连接等。析构函数的特点是:

1. 析构函数名称与类名相同,前面加~。如~MyClass()。

2. 析构函数没有返回类型。

3. 析构函数可以重载,但不能有参数。

4. 一个类中只能有一个析构函数。

5. 析构函数是由系统自动调用的,程序员不能直接调用。

简单来说并不是所有的情况都需要在类中定义析构函数的,只有当在类中申请了资源的情况下才需要在最后定义析构函数。

 比如上面的代码没有申请任何资源所以不需要定义析构函数,而下面的代码定义了一个name的内存,使用后需要用析构函数释放内存。

另外说一下内存泄漏,内存泄漏的是指程序中申请过的空间没有得到正确的释放,从而造成了内存空间不能被正常回收利用的问题。

内存泄漏的后果就是电脑内存一直在被占用,资源得不到释放导致程序运行变慢甚至崩溃。

发生内存泄漏的主要原因有:

堆内存分配后没有得到正确的释放,简单说一下堆内存和stack内存,占(stack)内存是由编译器或系统自动分配的,他的响应速度快,但是内存空间小,往往不会产生泄漏问题,而堆内存是程序员自己定义的内存,比如在定义一个新的对象时,new操作符会申请出一些堆空间,这样的空间不会被系统自动释放,需要程序员手动释放,这也是发生内存泄漏的主要原因。

其次还有可能是全局变量没有使用,或者是对一个变量重复进行释放等等。

猜你喜欢

转载自blog.csdn.net/qq_40962125/article/details/130752261
今日推荐