C++ 中 new 和 delete 操作符的区别

2025年5月30日 | 6 分钟阅读

在 C++ 编程语言中,new 和 delete 操作符主要用于动态内存分配和释放。它们使我们能够动态地分配和释放内存,这意味着我们可以创建其大小和生命周期可以在运行时定义的对象的。

在本文中,我们将讨论 C++ 中 new 和 delete 操作符的区别。在讨论它们的区别之前,我们必须了解 C++ 中的 new 和 delete 操作符。

C++ 中的 new 操作符是什么?

在 C++ 中,new 操作符是一个内存分配操作符,用于在运行时分配内存。new 操作符在堆上分配内存并进行初始化。它返回已分配内存的起始地址,该地址可以存储在指针变量中。它允许我们在编译时不知道所需变量的大小或数量时分配内存。

语法

它具有以下语法:

在这个语法中,

  • type: 表示 new 操作符分配内存的变量的数据类型。
  • new: 这是一个用于分配内存的操作符。
  • variable: 这是指向内存的变量的名称。
  • parameter_list: 这是初始化变量的值列表。

C++ new 操作符示例

让我们通过一个示例来说明 C++ 中的 new 操作符。

示例

编译并运行

输出

The value stored at ptr is: 15

说明

在此示例中,我们演示了 C++ 中的 new 操作符。首先,我们使用 new int 为一个整数分配内存。之后,*ptr = 15 将值存储在分配的内存中。最后,它打印输出。

C++ 中的 delete 操作符是什么?

delete 操作符是一个在 C++ 编程语言中使用,用于动态释放内存的操作符。该操作符主要用于使用 new 操作符分配的指针或 NULL 指针。

语法

它具有以下语法:

C++ delete 操作符示例

让我们通过一个示例来说明 C++ 中的 delete 操作符。

示例

编译并运行

输出

Array elements are : 1 2 3 4 5 6

C++ 中 new 和 delete 操作符的主要区别

C++ 中的 new 和 delete 操作符之间有几个主要区别。一些主要区别如下:

定义

new 操作符主要用于为对象或对象数组分配内存。它返回指向已分配内存的指针。相反,delete 操作符主要用于释放先前使用 new 分配的内存。它释放指针指向的内存并将指针设置为 null。

语法

new 操作符的语法是

delete 操作符的语法是

内存分配

在 C++ 中,new 操作符从堆(一个全局内存池)为对象或对象数组分配内存。内存块的大小由对象数据类型或对象数组指定。相反,delete 操作符释放 new 操作符分配的内存。

初始化

在 C++ 中,new 操作符使用默认的类构造函数初始化为对象分配的内存。如果没有默认构造函数,则可以使用 placement new 操作符调用合适的构造函数。相反,delete 操作符不执行任何初始化。它只调用对象的析构函数并释放内存。

数组分配

在 C++ 中,new 操作符主要用于为对象数组分配内存。

语法

数组分配的语法是

另一方面,delete 操作符可用于释放使用 new 操作符分配的对象数组。

语法

数组释放的语法是

异常处理

在 C++ 中,如果 new 操作符未能分配内存,它会抛出异常。在这种情况下,程序可以捕获异常并采取适当的措施。相反,delete 操作符不抛出任何异常。

运算符重载

在 C++ 中,new 和 delete 操作符都可以被重载,这允许我们自定义特定类的动态内存分配和释放方式。这对于许多情况特别有用,例如调试、内存池和实现自定义内存管理系统。

全局重载

在 C++ 中,我们可以全局重载 new 和 delete 操作符,以更改程序中内存分配和释放的行为。

New 操作符语法

重载全局 new 操作符的语法如下:

Delete 操作符语法

重载全局 delete 操作符的语法如下:

通过重载这些操作符,我们可以自定义程序中的内存分配和释放行为。这在许多情况下都非常有用,例如开发实时系统和嵌入式系统。

new 和 delete 操作符的表格形式区别

C++ 中 new 和 delete 操作符之间的几个主要区别如下所示:

特点New 操作符Delete 操作符
定义它为对象或对象数组分配内存。它释放 new 分配的内存。
语法pointer_variable = new data_type;delete pointer_variable;
内存分配它从堆分配内存。它释放 new 操作符分配的内存。
初始化它使用默认构造函数初始化内存。它不执行任何初始化过程。
数组分配它为对象数组分配内存。它释放对象数组。
异常处理如果无法分配内存,它会抛出异常。它不抛出任何异常。

结论

总之,new 和 delete 操作符是动态内存管理的重要特性。new 和 delete 操作符都在堆内存上执行操作,但它们也有一些区别,例如语法、用法和初始化行为。通过理解这些操作符,我们可以利用它们来防止常见的内存泄漏问题,并更好地控制系统资源。

New 和 Delete 操作符区别常见问题解答

1) C++ 中的 new 操作符是什么?

new 操作符在堆上动态地为对象或对象数组分配内存。

2) C++ 中的 delete 操作符是什么?

delete 操作符释放 new 操作符为单个对象或变量分配的内存。

3) 如果我们对同一个指针调用两次 delete 操作符会怎样?

如果我们在同一个指针上多次调用 delete 操作符,会导致未定义的行为和程序崩溃。

4) C++ 中的 new 和 delete 操作符可以重载吗?

是的,我们可以在类中重载 new 和 delete 操作符来定制内存分配和释放。

5) C++ 中的 delete 和 delete[] 有什么区别?

delete 操作符主要用于释放单个对象的内存。相反,delete[] 主要用于释放使用 new[] 分配的对象数组的内存。