📜  C++中用于动态内存的new和delete运算符(1)

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

C++中用于动态内存的new和delete运算符

C++中的new和delete运算符用于动态地分配和释放内存。它们是重要的内存管理工具,可以在程序运行时动态地分配多余的内存空间,以满足程序的需要。

new运算符

new运算符用于动态地分配内存,并返回分配的地址。其语法格式为:

pointer_variable = new data_type;

其中,pointer_variable是一个指向data_type类型的指针变量,new运算符返回分配的内存地址并将其赋值给pointer_variable。

例如,以下代码动态地分配了一个整型变量,并将其地址存储在指针变量p中:

int* p;
p = new int;

我们也可以使用new运算符动态分配一个数组:

int* p;
p = new int[10];

这将创建一个包含10个整型元素的数组,并将其地址存储在指针变量p中。

delete运算符

delete运算符用于释放动态分配的内存,并将该内存返回给系统。其语法格式为:

delete pointer_variable;

其中,pointer_variable是一个指向动态分配内存的指针变量。例如,以下代码释放了之前动态分配的整型变量和数组:

int* p;
p = new int;
delete p;

int* q;
q = new int[10];
delete[] q;

需要注意的是,必须使用delete[]运算符释放动态分配的数组。如果使用delete运算符释放数组,会导致未定义的行为。

new和delete运算符的异常处理

new运算符会抛出std::bad_alloc异常,如果请求的内存无法分配。我们可以通过try-catch语句处理该异常,以避免程序异常终止。例如:

try {
  int* p = new int[1000000000000];
} catch (const std::bad_alloc& e) {
  std::cerr << "Memory allocation failed: " << e.what() << '\n';
}

delete运算符不会抛出异常,但如果指针变量为空,则不会执行任何操作。因此,我们可以在delete运算符之前检查指针变量是否为空。例如:

int* p = nullptr;
p = new int;
if (p != nullptr) {
  delete p;
  p = nullptr;
}

以上是C++中用于动态内存的new和delete运算符的介绍。我们可以通过它们动态地分配和释放内存,以满足程序的需要。使用时需要注意内存的分配和释放,并进行适当的异常处理,以确保程序的正确性。