news 2026/6/7 8:06:37

C++中的安全指针(智能指针)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++中的安全指针(智能指针)

C++中的安全指针(智能指针)主要用于自动内存管理,避免内存泄漏和悬挂指针。主要有以下几种:

1. 标准库智能指针

unique_ptr(独占指针)

  • 特点:独享所有权,不可复制,可移动
  • 适用场合:单一所有权,对象只有一个拥有者
  • 示例
std::unique_ptr<int>ptr(newint(10));// 或者使用 make_unique(C++14)autoptr=std::make_unique<int>(10);

shared_ptr(共享指针)

  • 特点:共享所有权,使用引用计数
  • 适用场合:多个对象共享同一资源
  • 示例
std::shared_ptr<int>ptr1=std::make_shared<int>(20);std::shared_ptr<int>ptr2=ptr1;// 引用计数+1

weak_ptr(弱指针)

  • 特点:不增加引用计数,解决循环引用问题
  • 适用场合:观察共享资源,避免循环引用
  • 示例
std::shared_ptr<int>sp=std::make_shared<int>(30);std::weak_ptr<int>wp=sp;// 不增加引用计数

2. 在信息学奥赛(OI/信奥)中的应用

使用场景:

  1. 动态数据结构:树、图的节点管理
  2. 避免内存泄漏:复杂算法中的临时对象
  3. 简化代码:减少new/delete的配对使用

实际案例:

// 二叉树节点structTreeNode{intval;std::unique_ptr<TreeNode>left;std::unique_ptr<TreeNode>right;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};// 使用智能指针构建树autoroot=std::make_unique<TreeNode>(1);root->left=std::make_unique<TreeNode>(2);root->right=std::make_unique<TreeNode>(3);

3. 竞赛中的注意事项

优点:

  • ✅ 自动内存管理,减少错误
  • ✅ 代码更简洁清晰
  • ✅ 异常安全

缺点(在竞赛中):

  • ⚠️ 轻微性能开销(通常可忽略)
  • ⚠️ 某些老旧的竞赛环境可能不支持C++11/14
  • ⚠️ 调试时不如裸指针直观

4. 建议

  1. 信奥/ACM竞赛

    • 如果环境支持C++11+,推荐使用智能指针
    • 简单题目可以用裸指针+手动管理
    • 复杂数据结构(如平衡树、图)建议使用智能指针
  2. 学习路径

    • 先掌握new/delete和裸指针
    • 再学习智能指针的概念
    • 实际编码中优先使用智能指针
  3. 性能考虑

    • 大部分竞赛题智能指针开销可接受
    • 极端优化场景(如1e7次操作)可能需要裸指针

总结

对于信奥竞赛,建议掌握并合理使用智能指针,特别是unique_ptrshared_ptr。它们能帮助你写出更安全、更少bug的代码,尤其是在处理复杂数据结构时。虽然竞赛中有时追求极致性能,但在绝大多数情况下,智能指针的便利性和安全性优势远大于其微小的性能开销。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 18:30:01

Web自动化测试:如何生成高质量的测试报告?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快运行了所有测试用例&#xff0c;控制台输入的结果&#xff0c;如果很多测试用例那也不能够清晰快速的知道多少用例通过率以及错误情况。web自动化测试实战之批量执行…

作者头像 李华
网站建设 2026/6/2 20:14:59

LobeChat积分体系规则生成器

LobeChat积分体系规则生成器 在AI助手逐渐从个人玩具走向企业级服务的今天&#xff0c;一个看似简单的问题正变得越来越关键&#xff1a;如何公平、灵活地管理用户对大模型资源的使用&#xff1f;无论是防止API账单爆炸式增长&#xff0c;还是为未来的商业化铺路&#xff0c;开…

作者头像 李华
网站建设 2026/6/6 15:28:44

TikTok挑战赛创意:LobeChat想出让人心动的主题

LobeChat 如何让 TikTok 挑战赛创意不再“卡壳”&#xff1f; 在短视频平台竞争白热化的今天&#xff0c;一条爆款视频可能带来百万曝光&#xff0c;而一个出圈的挑战赛甚至能重塑品牌认知。但对内容创作者而言&#xff0c;最令人头疼的问题从来不是剪辑技巧或拍摄设备——而是…

作者头像 李华
网站建设 2026/6/6 23:49:57

win系统禁止打印功能

一、最推荐&#xff08;⭐⭐⭐⭐⭐&#xff09;&#xff1a;禁用 Print Spooler 服务&#xff08;最干净&#xff09;这是 Windows 打印的核心服务&#xff0c;关掉它&#xff1a;所有程序&#xff08;包括 Chrome / JxBrowser&#xff09;都 无法打印点打印按钮 → 直接失败或…

作者头像 李华
网站建设 2026/6/6 2:27:39

基于单片机的水质检测装置设计

摘 要 随着水资源保护需求日益增长&#xff0c;设计高精度水质检测装置意义重大。本设计以单片机为控制核心&#xff0c;结合 pH 传感器、浊度传感器、电导率传感器等多种传感器&#xff0c;构建了一套完整的水质检测装置。通过传感器实时采集水体的 pH 值、浊度、电导率等关键…

作者头像 李华
网站建设 2026/6/3 21:56:49

一文搞懂:MPS / MRP / MRP II,生产计划再不难!

坦白说&#xff0c;工厂里最容易被搞得一团糟的&#xff0c;不是机台、不是人&#xff0c;而是 计划。 一天到晚缺料、加班、订单延迟&#xff0c;很多时候不是因为现场不努力&#xff0c;而是计划本身逻辑就错了。最常听见的一句话是&#xff1a;“MPS、MRP、MRP II 这个你一定…

作者头像 李华