news 2026/8/6 21:58:55

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/8/6 20:19:11

Blender 3D建模提示词工程:LobeChat来帮忙

Blender 3D建模提示词工程&#xff1a;LobeChat来帮忙 在3D创意设计的世界里&#xff0c;灵感从闪现到落地往往隔着一道鸿沟——技术细节的复杂性。一个“未来感悬浮路灯”的构想听起来简单&#xff0c;但要在Blender中实现它&#xff0c;却需要精确的几何结构、材质参数、光照…

作者头像 李华
网站建设 2026/8/6 6:31:38

全球光伏与风电时空分布数据集

随着全球能源转型加速&#xff0c;光伏与风电的快速发展催生了对高质量时空数据的迫切需求。 微软 AI for Good Research Lab 于 2025 年 3 月发布的Global Renewables Watch 数据集&#xff0c;凭借高分辨率卫星图像分析与深度学习技术。 构建了 2017 年第四季度至 2024 年第…

作者头像 李华
网站建设 2026/8/6 11:55:55

QByteArray 常用接口

1.QByteArray 常用接口QByteArray是Qt框架中用于处理原始字节数据的核心类&#xff0c;其常用接口可分为以下几类&#xff0c;涵盖构造、访问、修改、转换等操作&#xff1a;1. 构造与初始化构造函数QByteArray(): 创建空字节数组。QByteArray(int size, char c): 创建大小为si…

作者头像 李华
网站建设 2026/8/6 16:53:20

关于JxBrowser 里 Chrome 自带的 PDF 工具栏,能不能隐藏问题?

可以的&#xff0c;但要分两种情况说清楚&#xff0c;因为这取决于 你用的是 Chrome 内置 PDF Viewer&#xff0c;还是自己接管渲染。JxBrowser 本质是嵌入式 Chromium&#xff0c;它不会直接给你一个“隐藏 PDF 工具栏”的现成 API&#xff0c;但有几种可行且常用的方案。一、…

作者头像 李华
网站建设 2026/8/6 11:16:32

Google Ads优化常见10个错误:外贸独立站Google推广如何避免浪费预算

本文汇总Google Ads优化常见10大错误&#xff0c;针对外贸独立站Google推广给出实操策略&#xff0c;帮助企业避免预算浪费并提升投放ROI。文章面向信息调研者、使用者、企业决策者及项目管理者&#xff0c;兼顾售后与渠道伙伴痛点&#xff0c;既有策略性决策框架&#xff0c;也…

作者头像 李华
网站建设 2026/8/6 11:55:08

UI自动化测试—Jenkins配置优化

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快前一段时间帮助团队搭建了UI自动化环境&#xff0c;这里将Jenkins环境的一些配置分享给大家。背景&#xff1a;团队下半年的目标之一是实现自动化测试&#xff0c;…

作者头像 李华