三星 C++ 怎么防止内存泄漏

内存泄漏将会导致系统内存中无用的空间越来越多,最终导致内存不足,内存爆炸。所以,有必要防止内存泄漏。本文介绍了两种防止内存泄漏的方法以及内存泄漏检测工具valgrind的实现原理。

1、防止内存泄漏

1、内部封装

将内存的分配和释放封装到类中。在类中构造构造函数和析构函数。构造的时候分配内存空间,最后从析构函数中释放内存空间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A {
private:
char p*;
unsigned int p_size;
public:
A(unsigned int n = 1) {
p = new char[n]; // 构造函数分配内存
p_size = n;
}
~A() {
if (p != NULL) {
delete[] p; // 删除字符数组的内存空间,在堆上
p = NULL; // p指向的空间已经被删除了,给p重新赋值,避免出现野指针。
}
}
}

该方法不是最佳的做法,因为在类的对象复制时,程序会出现同一块内存空间释放两次的情况。

在一个函数内创建两个类的对象,让一个对象等于另一个对象。在离开函数作用域的时候,将会调用两次析构函数来释放空间,但是两个对象指向同一块内存,所以同一块内存就被释放了两次。** 可以通过增加计数机制来避免这种情况**;

2、智能指针

智能指针是 C++ 中已经对内存泄漏封装好了一个工具,可以直接拿来使用。可以自己计数。