C++ 内存管理:何时使用 new 和 delete

来自:互联网
时间:2024-05-05
阅读:

C++ 内存管理:何时使用 new 和 delete

C++ 内存管理:何时使用 new 和 delete

在 C++ 中,管理内存对于编写健壮且高效的程序至关重要。new 和 delete 运算符是 C++ 中管理内存的主要工具,理解它们的正确用法对于避免内存泄漏和程序崩溃至关重要。

什么时候使用 new

new 运算符用于在堆内存中动态分配对象。堆内存是程序运行时由操作系统管理的内存区域。使用 new 时,编译器负责向操作系统请求所需的内存并返回指向新分配内存块的指针。

以下是如何使用 new 运算符分配一个 int 数组:

int* arr = new int[10];

什么时候使用 delete

delete 运算符用于释放先前使用 new 分配的内存块。它将指针指向的内存块归还给操作系统,防止程序出现内存泄漏。

必须始终使用 delete 来释放使用 new 分配的所有内存。否则,程序可能会因内存泄漏而崩溃。

以下是如何使用 delete 运算符释放数组 arr 分配的内存:

delete[] arr;

实战案例

假设我们有一个函数,该函数接收一个整数 n,并创建一个包含 n 个元素的数组。

int* createArray(int n) {
  int* arr = new int[n];  // 使用 new 分配内存
  return arr;
}

在函数外部,我们使用此函数创建数组,并在使用完毕后释放内存:

int* arr = createArray(10);

// 使用数组

delete[] arr;  // 释放内存

在上面的示例中,我们使用 new 和 delete 正确地管理数组的内存,防止了内存泄漏。

需要注意的点

  • 始终使用 delete 释放使用 new 分配的内存。
  • 确保不尝试释放未分配的内存,否则会导致未定义的行为。
  • 在 C++11 中,new 和 delete 可以通过智能指针(如 unique_ptr 和 shared_ptr)进行优化。
返回顶部
顶部