在C++编程的广阔天地中,动态内存管理是一项不可或缺的技能。通过new
与delete
操作符,开发者能够按需分配和释放内存,这对于处理不确定大小的数据结构或在运行时调整资源尤为关键。然而,不当的使用也可能导致内存泄漏、悬挂指针等问题。本文旨在深入浅出地讲解new
与delete
的使用方法,剖析常见问题与易错点,并通过实例代码展示如何避免这些陷阱。
动态内存分配基础
new
操作符
- 基本用法:
new
用于在堆上分配内存,返回所分配内存的首地址。例如,int *p = new int;
分配一个整型大小的内存,并将地址赋给指针p
。 - 初始化分配:
new
还可以直接初始化分配的内存,如int *p = new int(10);
初始化为10。 - 数组分配:分配数组时使用
new[]
,如int *arr = new int[5];
分配一个包含5个整数的数组。
delete
操作符
- 释放单个对象:
delete p;
释放由p
指向的内存。 - 释放数组:释放数组时必须使用
delete[]
,如delete[] arr;
,否则会导致未定义行为。
常见问题与易错点
1. 内存泄漏
问题描述:分配的内存没有被及时释放。 示例:
void function() {
int *ptr = new int;
// ...操作ptr
// 忘记释放ptr指向的内存
<