C++ 如何使用智能指针 (shared_ptr, unique_ptr)_C++ 智能指针用法与内存管理


C++11引入智能指针解决内存管理问题,unique_ptr独占所有权并自动释放资源,shared_ptr通过引用计数实现共享所有权,weak_ptr打破循环引用,推荐使用make_unique和make_shared创建智能指针以提升安全性。

c++ 如何使用智能指针 (shared_ptr, unique_ptr)_c++ 智能指针用法与内存管理

在 C++ 中,手动管理内存容易引发内存泄漏、重复释放等问题。为了解决这些问题,C++11 引入了智能指针,主要包括 std::unique_ptr 和 std::shared_ptr,它们能自动管理动态分配的对象生命周期,确保资源安全释放。

std::unique_ptr:独占所有权的智能指针

std::unique_ptr 表示对对象的独占所有权,同一时间只能有一个 unique_ptr 指向某个对象。当 unique_ptr 被销毁时,它所管理的对象也会被自动删除。

使用场景:当你需要动态分配对象且不希望多个指针共享该对象时,应优先使用 unique_ptr。

基本用法:

  • 通过 std::make_unique 创建(C++14 起推荐方式)
  • 不能复制,但可以移动(move)
  • 离开作用域时自动释放内存
#include <memory>
#include <iostream>

int main() {
    auto ptr = std::make_unique<int>(42);
    std::cout << *ptr << "\n"; // 输出 42

    // 移动所有权
    auto ptr2 = std::move(ptr);
    // 此时 ptr 为空,ptr2 拥有对象

    return 0;
} // ptr2 离开作用域,自动 delete

std::shared_ptr:共享所有权的智能指针

std::shared_ptr 实现引用计数机制,多个 shared_ptr 可以共享同一个对象。只有当最后一个 shared_ptr 被销毁时,对象才会被释放。

使用场景:多个模块或函数需要共享同一个对象时使用。

NoCode NoCode

美团推出的零代码应用生成平台

NoCode 180 查看详情 NoCode

基本用法:

  • 通过 std::make_shared 创建(更高效)
  • 支持拷贝,每拷贝一次引用计数加一
  • 引用计数归零时自动释放资源
#include <memory>
#include <iostream>

void use_ptr(std::shared_ptr<int> p) {
    std::cout << "引用计数: " << p.use_count() << "\n";
}

int main() {
    auto sptr = std::make_shared<int>(100);
    std::cout << "初始引用计数: " << sptr.use_count() << "\n";

    {
        auto sptr2 = sptr; // 引用计数 +1
        std::cout << "复制后引用计数: " << sptr.use_count() << "\n";
        use_ptr(sptr2); // 再次增加临时引用
    } // sptr2 销毁,引用计数 -1

    return 0;
} // sptr 销毁,引用计数归零,释放内存

避免循环引用:使用 weak_ptr

当两个 shared_ptr 相互持有对方时,会导致引用计数无法归零,形成内存泄漏。这时应使用 std::weak_ptr 打破循环。

weak_ptr 不增加引用计数,只是一个“观察者”,访问前需检查对象是否还存在。

#include <memory>
struct Node {
    std::shared_ptr<Node> parent;
    std::weak_ptr<Node> child; // 避免循环引用
};

auto node1 = std::make_shared<Node>();
auto node2 = std::make_shared<Node>();
node1->child = node2;
node2->parent = node1; // 形成父子关系,但 child 是 weak_ptr
// 正常析构,不会泄漏

基本上就这些。合理使用 unique_ptr 和 shared_ptr,配合 make_unique / make_shared,能极大提升代码安全性与可维护性。注意避免裸 new/delete,优先让智能指针接管资源管理。

以上就是C++ 如何使用智能指针 (shared_ptr, unique_ptr)_C++ 智能指针用法与内存管理的详细内容,更多请关注其它相关文章!


# c++智能指针  # node  # ai  # c++  # 内存管理  # 不改变  # 优化网站的意思和作用  # 学院网站栏目统筹建设  # 也会  # 动态分配  # 情况下  # 如何实现  # 第三方  # 微软  # 多个  # 如何使用  # red  # 作用域  # stream  # ios  # 珠海网站关键词优化排名  # 精准营销推广顾问  # seo导航做法  # 彝良seo收费  # 建议网站建设论文范文  # 深圳网站建设咨询公司  # 搜索排名seo矩阵  # seo怎么玩知乎 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 睡觉时心跳快是什么原因 夜间心悸如何应对  在Django中动态检查模型关联:一种灵活的解决方案  《花瓣》创建专辑方法  夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】  Python中对象引用与链表属性赋值的机制解析  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法  《优志愿》修改手机号方法  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  J*aScript实现下拉菜单驱动的动态表格数据展示  海外搜索引擎推广效果怎么样,怎么分析效果!  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  申通快递物流信息查询 申通快递包裹状态追踪  德邦快递查询入口登录官网 德邦快递单号查询系统入口  实现二叉树的层序插入:基于树大小的路径导航  VS Code中的Tailwind CSS IntelliSense插件使用技巧  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  实现可重用自定义Python Range类  微信步数怎么刷_微信步数快速提升技巧  192.168.1.1路由器后台入口 192.168.1.1默认登录入口  更换小红书群背景怎么换?小红书群规则怎么设置?  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  如何自定义苹果手机铃声  CSS过渡与滚动滚动事件结合应用_scroll与transition动画  向往的生活小游戏启动处_向往的生活小游戏立即启动  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  阿里云共享相册入口在哪  Golang如何操作指针参数_Go pointer参数传递规则  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  如何取消数字签名  TikTok视频播放中断怎么办 TikTok播放异常修复方法  猫眼app抢票快还是小程序快  键盘保修需要什么_键盘售后维修流程  微信网页版在线登录 微信网页版在线使用入口  抖音猜你想搜能说明对方搜过吗  《单词速记宝》设置学习计划方法  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  《美篇》取消会员自动续费方法  vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】  126邮箱网页在线登录2025_126邮箱网页版入口官方地址  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  快递查询,一键速查  PySimpleGUI中实现键盘按键与按钮事件绑定教程 

 2025-11-26

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.