📅  最后修改于: 2023-12-03 14:59:48.327000             🧑  作者: Mango
在 C++ 中,动态分配内存的操作非常常见。我们可以通过 new
或者 malloc
来分配内存,但是在使用完之后,需要释放这些内存以避免内存泄漏。C++ 中提供了两种释放内存的方式:delete
和 free()
。
delete
是 C++ 中的关键字,用于释放一个对象所占用的内存。假设我们已经通过 new
来分配了一个空间,那么删除这个空间需要使用 delete
,如下所示:
int* ptr = new int;
/* code to use ptr */
delete ptr;
注意,我们在使用 delete
的时候,需要使用和 new
对应的指针来删除。这是因为 new
返回的是一个指向动态分配内存的指针,delete
需要知道需要删除哪个指针指向的内存。
如果我们使用错误的指针来删除空间,那么程序运行时就会出现不可预知的结果。例如:
int* ptr = new int;
int* ptr2 = ptr;
/* code to use ptr */
delete ptr2; // Undefined behavior
由于 ptr2
指向了 ptr
所指向的内存,因此释放 ptr2
会导致 ptr
所指向的内存出现未定义行为。因此,在使用 delete
的时候,需要特别注意使用正确的指针。
此外,我们还可以使用 delete[]
来释放一个数组的内存。假设我们通过 new[]
来分配了一个数组,那么删除这个数组需要使用 delete[]
,如下所示:
int* ptr = new int[10];
/* code to use ptr */
delete[] ptr;
同样地,我们也需要使用正确的指针来删除内存。
free()
是 C++ 中的一个函数,用于释放一个已经通过 malloc
或者 calloc
分配的内存。使用 free()
的方式非常简单,如下所示:
int* ptr = (int*)malloc(sizeof(int));
/* code to use ptr */
free(ptr);
需要注意的是,由于 free()
不会自动调用对象的析构函数,因此如果我们使用 malloc
或者 calloc
分配内存的话,需要手动调用对象的析构函数来释放内存。因此,如果我们需要动态分配的对象,则应该使用 new
和 delete
,而不是 malloc
和 free()
。
在 C++ 中,动态分配内存是非常常见的操作。使用 new
和 delete
可以方便地分配和释放内存,保证程序的运行效率和内存使用效率。在使用 delete
的时候,需要注意使用正确的指针;而在使用 malloc
或者 calloc
分配内存的时候,需要手动调用对象的析构函数来释放内存。