📜  C++ 中的 delete 和 free()(1)

📅  最后修改于: 2023-12-03 14:59:48.327000             🧑  作者: Mango

C++ 中的 delete 和 free()

在 C++ 中,动态分配内存的操作非常常见。我们可以通过 new 或者 malloc 来分配内存,但是在使用完之后,需要释放这些内存以避免内存泄漏。C++ 中提供了两种释放内存的方式:deletefree()

delete

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()

free() 是 C++ 中的一个函数,用于释放一个已经通过 malloc 或者 calloc 分配的内存。使用 free() 的方式非常简单,如下所示:

int* ptr = (int*)malloc(sizeof(int));
/* code to use ptr */

free(ptr);

需要注意的是,由于 free() 不会自动调用对象的析构函数,因此如果我们使用 malloc 或者 calloc 分配内存的话,需要手动调用对象的析构函数来释放内存。因此,如果我们需要动态分配的对象,则应该使用 newdelete,而不是 mallocfree()

总结

在 C++ 中,动态分配内存是非常常见的操作。使用 newdelete 可以方便地分配和释放内存,保证程序的运行效率和内存使用效率。在使用 delete 的时候,需要注意使用正确的指针;而在使用 malloc 或者 calloc 分配内存的时候,需要手动调用对象的析构函数来释放内存。