news 2026/6/6 1:14:55

C++智能指针详解:unique_ptr、shared_ptr 与 weak_ptr

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++智能指针详解:unique_ptr、shared_ptr 与 weak_ptr

智能指针(知识篇)

    • 前言以及知识储备
    • 为什么需要智能指针
    • unique_ptr(最常用的智能指针之一)
    • shared_ptr
    • weak_ptr

前言以及知识储备

我们在学习智能指针之前需要先了解RAII思想
即Resource Acquisition Is Initialization(资源获取即初始化)
对于这个知识链接: link
点击此链接即可直接学习

为什么需要智能指针

正常情况下,我们用指针去指向一个new出来的区域,指针在函数结束后就消失了,但是如果我们在指针消失前忘了delete掉new出来的空间,就会导致内存泄漏。

voidTest(){int*p=newint(10);// 忘记delete}

为了让对象析构时自动delete,C++11将unique_ptr、shared_ptr、weak_ptr正式纳入标准库。

unique_ptr(最常用的智能指针之一)

特点:独占所有权,即一个资源只能有一个主人。(禁止拷贝)
创建语法:

#include<memory>unique_ptr<int>p(newint(10));//方法一autop=make_unique<int>(10);//方法二(推荐)

方法二中的auto指的是unique_ptr
虽然这种智能指针不能拷贝,但可以移动

unique_ptr<int>p2=move(p1);

结果p1 == nullptr
p2拥有资源

shared_ptr

特点:共享所有权,即多个智能指针共同管理一个资源。(允许拷贝)
创建语法:

autop=make_shared<int>(10)

内部维护时存在引用计数。
每当多一个shared指针指向同一个资源时,计数加一。
而我们如何知道计数计到几呢,需要用到以下语法:

cout<<p1.use_count();

当对象的生命周期结束时,触发对象销毁,每当有指向该资源的shared_ptr对象都销毁时,引用计数就会减一,直到归零,自动进行delete。

weak_ptr

与shared_ptr的区别在于:

shared_ptr拥有所指向的对象
weak_ptr观察所指向的对象,weak_ptr不会增加引用计数。

拥有者需要保证对象活着,但观察者不需要。
因此:

shared_ptr<int>sp=make_shared<int>(10);weak_ptr<int>wp=sp;sp.use_count()

仍然是:1
不会变成2
有人会觉得,这个weak_ptr存在意义不大。
举一个例子:

classBclassA{public:shared_ptr<B>b;};classB{public:shared_ptr<A>a;};intmain(){shared_ptr<A>pa(newA);shared_ptr<B>pb(newB);pa->b=pb;pb->a=pa;}

这段代码的引用计数永远不为0。
原因:

pa指向A A1
Pb指向B B1
Pa->b指向B B2
Pb->a指向A A2
Main结束后
A类里面的b指向B
B类里面的a指向A

导致引用计数始终不为0,
shared_ptr无法自动释放资源,
最终造成内存泄漏。
而解决方法很简单:

classB{public:weak_ptr<A>a;};

由于weak_ptr不会增加引用计数,这会导致A与B,有一个是1一个是2,打破循环。

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

MioSub:全自动字幕生成软件,下载转录翻译压制一条龙

给一个30分钟视频做字幕&#xff0c;通常要在五六个工具之间来回倒腾。MioSub 把「下载视频、语音转写、AI翻译、时间轴对齐、字幕压制」这条流水线缝合成了一键操作。30分钟视频8分钟出成品。真懂上下文不是逐句硬翻。MioSub会提取术语表&#xff0c;记住角色名、专有名词&…

作者头像 李华
网站建设 2026/6/6 1:07:57

南京Deepseek关键词优化服务商:AI搜索流量破局秘籍大公开

当企业还在为传统搜索引擎流量持续下滑而焦虑时&#xff0c;AI搜索革命已悄然重塑营销格局。最新数据显示&#xff0c;2025年国内生成式AI搜索用户突破8亿&#xff0c;企业通过AI大模型获取的商业咨询量同比增长217%。在这场流量迁徙中&#xff0c;南京Deepseek关键词优化服务商…

作者头像 李华
网站建设 2026/6/6 1:06:03

拒绝高昂维护费!资深开发者教你如何用低成本方案,将小程序/App运营成本降低90%(附避坑指南)

在移动互联网时代&#xff0c;拥有自己的小程序、Web 网站或 Android App 已经是许多商家和中小企业的刚需。然而&#xff0c;很多老板在咨询了一圈外包公司后&#xff0c;往往会被高昂的报价和后期繁琐的服务器维护费劝退。作为一名拥有多年一线开发经验的独立开发者&#xff…

作者头像 李华
网站建设 2026/6/6 1:04:48

大模型做运动预测,MotionLM 与 BEVGPT 技术路线对比解析

从语言建模到鸟瞰图生成&#xff1a;MotionLM 与 BEVGPT 的技术分野 在自动驾驶的感知与规划链条中&#xff0c;运动预测始终是最具挑战性的环节之一。传统的基于规则或简单深度学习的方法&#xff0c;往往难以捕捉复杂交通场景中多智能体之间微妙的交互关系&#xff0c;更无法…

作者头像 李华
网站建设 2026/6/6 0:58:12

深度解析文件分析利器:Detect-It-Easy专业逆向工具完全指南

深度解析文件分析利器&#xff1a;Detect-It-Easy专业逆向工具完全指南 【免费下载链接】Detect-It-Easy Program for determining types of files for Windows, Linux and MacOS. 项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy Detect-It-Easy&#xff…

作者头像 李华