当前位置: 首页 > news >正文

C++中的指针 之二

不是所有的指针都需要 delete

是否需要 delete 取决于指针指向的内存的来源生命周期

只有通过 newnew[] 动态分配的堆内存才需要手动释放(使用 deletedelete[]),而指向栈内存、全局数据区或静态区的指针则绝对不能对其使用 delete,否则会导致未定义行为(通常程序崩溃)。

1. 需要 delete 的情况

当使用 new 在堆上分配内存时,必须在使用完毕后调用 delete 释放内存,否则会造成内存泄漏。

int* ptr = new int(20);   // 在堆上分配一个 int,初始值 20
// ... 使用 ptr
delete ptr;               // 释放内存,防止泄漏
ptr = nullptr;            // 可选:置空避免悬空指针

对于数组形式的动态分配:

int* arr = new int[10];   // 分配数组
// ... 使用 arr
delete[] arr;             // 释放数组内存

2. 不需要 delete 的情况

  • 指向栈变量的指针:栈内存由系统自动管理,不能手动释放。

    int a = 10;
    int* ptr = &a;          // ptr 指向栈上的变量 a
    // delete ptr;          // 错误!a 不是堆内存,释放会导致未定义行为
    
  • 指向静态或全局变量的指针:静态变量在程序启动时分配,结束时自动销毁,不能 delete

    static int b = 20;
    int* ptr = &b;          // 指向静态区
    // delete ptr;          // 错误!
    
  • 字符串字面量:字符串字面量存储在只读数据区,不能修改也不能释放。

    const char* str = "Hello";  // 指向只读区
    // delete str;               // 错误!
    
  • 使用智能指针:现代C++中,应优先使用 std::unique_ptrstd::shared_ptr 等智能指针,它们会自动管理内存,无需手动 delete

    #include <memory>
    std::unique_ptr<int> ptr = std::make_unique<int>(20);
    // 无需 delete,离开作用域时自动释放
    

3. 为什么不能随意 delete

  • 对非堆内存执行 delete 会破坏内存管理机制,可能导致程序崩溃。
  • 对同一个指针多次 delete 也是危险的(除非在第一次释放后置为 nullptr,对空指针 delete 是安全的)。

4. 总结

  • 只有 new 出来的内存才需要 delete
  • 指针本身只是地址,是否需要释放取决于该地址指向的内存区域。
  • 遵循“谁分配,谁释放”的原则,并尽量使用智能指针来避免手动管理。

所以,不是所有的指针都需要 delete只有在动态分配的内存上才需要手动释放

http://www.jsqmd.com/news/387633/

相关文章:

  • C++中的指针 之一
  • 2026最新AI大模型应用开发的核心技术学习线路看这里,程序员小白必看:大模型应用开发,收藏这份超全学习指南!
  • WebFlux vs MVC:Gateway集成若依框架的技术选型之争 - 实践
  • 掌握应用开发学习路线,大模型开发入门指南:小白也能轻松掌握的AI应用开发流程与实战(收藏版)
  • C++中的指针
  • prompt实践
  • AI_Agent也有体检中心了?AgentDoG开源框架,带你入门智能体安全防护
  • GLM-5与MiniMax-M2.5性能对比,小白程序员必看(收藏版)
  • CppCon 2025 学习:C++23 deducing this
  • 2026 Agent元年!小白程序员必备:大模型学习路线图+精选资源,收藏这份高薪指南!
  • AI大模型从入门到精通:小白程序员必备学习路线(2026最新版)
  • 导师严选!继续教育专用AI论文软件 千笔·专业学术智能体 VS 学术猹
  • Comsol流固耦合注浆及冒浆分析。 采用其中达西定律模块及固体力学模块,通过建立质量源项、体...
  • 信息论与编码篇---欧式距离
  • 学长亲荐!更贴合研究生需求的降AI率平台,千笔·降AI率助手 VS 云笔AI
  • 导师严选! AI论文平台 千笔写作工具 VS WPS AI 更贴合自考需求
  • [NOIP2025 T2] 清仓甩卖 题解
  • 告别低效繁琐!降AI率平台 千笔·专业降AI率智能体 VS 文途AI
  • 实测对比后!千笔·专业学术智能体,专科生论文写作神器
  • 隧道内车距监测,低光环境测距防追尾,输出安全提醒。
  • 江苏美学植发医院排行更新,2026年这些医院上榜,植发/微针植发/发际线种植/美学植发/不剃发植发,美学植发机构推荐排行 - 品牌推荐师
  • 数据结构DS-KMP算法(c++实现)
  • 一键关闭Win杀毒和禁止系统更新,Windows轻松设置
  • SpringBoot智能图书馆座位预约管理系统开题报告
  • 2026年1月清障车实力厂家排行榜单,这些品牌不容错过!3万左右清障车/蓝牌重载清障车,清障车源头厂家哪个好 - 品牌推荐师
  • MG-Nav: 基于稀疏空间记忆的双尺度视觉导航 论文阅读 - 详解
  • 2026最新!8个一键生成论文工具测评:专科生毕业论文+开题报告写作全攻略
  • AtCoder Beginner Contest 445
  • 物理机理嵌入和自适应学习的机械早期故障诊断(Python)
  • 别再瞎找了!10个AI论文软件深度测评,自考毕业论文写作必备工具推荐