使用 'delete' 释放内存
本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 7 课,共 56 课。
使用 new 动态分配内存时,使用完后这些内存不会自动消失。与会自动清理的普通变量不同,动态分配的内存会一直被占用,直到你显式释放它。这时,delete 关键字就非常重要。
delete 关键字会释放之前通过 new 分配的内存。使用 delete 时,你是在告诉系统,你已经用完这块内存,它可以被重新用于其他用途:
int* ptr = new int(42); // 分配内存
// 使用这块内存……
delete ptr; // 释放内存动态内存管理的基本规则很简单:每个 new 都必须有对应的 delete。如果你忘记释放动态分配的内存,就会造成内存泄漏:程序会继续占用不再使用的内存,最终可能导致系统可用内存耗尽。
对指针调用 delete 后,该指针会变得无效,不应再使用。删除后将指针设为 nullptr 是个好习惯,可以避免意外使用它。
挑战
简单创建一个程序,通过使用 new 分配内存、使用内存,然后使用 delete 正确释放内存,来演示动态内存的完整生命周期。
将提供以下输入:
- 一个要存储在动态分配内存中的整数值
- 第二个用于更新已存储值的整数值
你的程序应执行以下操作:
- 使用
new为一个整数动态分配内存,并将指针存储在名为dynamicPtr的变量中 - 使用解引用运算符,将第一个输入值赋给动态分配的内存
- 打印存储在动态分配内存中的初始值
- 将动态分配内存中的值更新为第二个输入值
- 打印更新后的值
- 使用
delete释放动态分配的内存 - 删除后将指针设置为
nullptr - 打印一条确认内存已释放的消息
使用以下确切的输出格式:
Initial value: [first value]
Updated value: [second value]
Memory freed successfully亲手试试
#include <iostream>
using namespace std;
int main() {
// 读取输入值
int firstValue, secondValue;
cin >> firstValue;
cin >> secondValue;
// TODO:在下面编写你的代码
// 1. 使用 new 分配内存,并将地址存入 dynamicPtr
// 2. 将 firstValue 赋给分配的内存
// 3. 输出初始值
// 4. 用 secondValue 更新值
// 5. 输出更新后的值
// 6. 释放内存,并将指针设为 nullptr
// 7. 输出确认消息
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C++ 在线编译器