智能指针原理及类型

C++智能指针:原理、类型与实战应用指南 在C++编程中,内存管理是核心挑战之一,传统裸指针容易导致内存泄漏和悬空指针等问题。RAII(资源获取即初始化)是一种重要的编程范式,通过将资源生命周期与对象生命周期绑定,确保资源自动释放。智能指针基于RAII思想,将动态内存管理自动化,显著提升代码的健壮性和安全性。C++标准库提供了多种智能指针类型,包括独占所有权的`std::unique_ptr`、共享所有权的`std::shared_ptr`以及用于打破循环引用的`std::weak_ptr`。这些工具不仅简化了内存管理,还支持自定义删除器以管理文件 阅读详情

1、share_ptr
unique_ptr
weak_ptr

2、C++ 智能指针是用来自动管理内存资源,避免内存泄露,自动申请和释放资源的对象;

3、推荐优先使用 unique_ptr,共享才用 shared_ptr,循环引用时配合 weak_ptr。

unique_ptr:独占资源,资源只能被一个对象拥有;
share_ptr:共享资源,资源可以被多个对象用有,多个对象间用引用计数记录,释放资源,先减引用计数;
weak_ptr:循环引用时,配合循环引用使用

4、std::unique_ptr p1 = std::make_unique<int>(10); std::unique_ptr p2= std::move(p1); //只能移动 不能复制

5、std::share_ptr p1 = make_share(42);
std::share_ptr p1 = p1;

weak_ptr 是什么?

weak_ptr 是一个不参与引用计数的智能指针。

它只是观察(weakly reference)一个 shared_ptr 管理的对象,不会增加引用计数。

weak_ptr 不能直接访问对象,需要通过 lock() 转成 shared_ptr。

由

struct A {
    std::shared_ptr<B> b;
};

struct B {
    std::shared_ptr<A> a;
};

会引起循环引用 导致引用计数不能降为0 最终无法析构
改成

struct A {
    std::shared_ptr<B> b;
};

struct B {
    std::weak_ptr<A> a;  // 这里改为 weak_ptr
};

则weak_ptr不影响析构 不增加引用技术
他的使用

std::weak_ptr<A> weak_a = ...;

if (auto shared_a = weak_a.lock()) {
    // shared_a 是一个 shared_ptr<A>
    shared_a->doSomething();  // ✅ 可以安全访问
} else {
    // 对象已经被销毁,无法访问
}

智能指针的原理
智能指针是一个类模板,含构造函数和析构函数,share_ptr还包含引用计数 是在堆内分配内存
make_ptr让其只需分配一次内存,在堆内

C++成员函数模板实现智能指针类型转换:原理、实现与陷阱规避 在C++模板编程中,类型转换是实现泛型设计的关键挑战。其核心原理在于利用模板参数推导和隐式转换规则,使自定义类模板能够模仿内置类型的兼容性行为。这项技术的核心价值在于提升代码的复用性和表现力,让用户自定义类型(如智能指针、容器)能够像原生指针一样自然地处理继承关系。通过成员函数模板,我们可以定义一个接受“所有兼容类型”的构造函数或赋值运算符,在智能指针、迭代器等场景中实现安全的向上转型或添加const限定。例如,智能指针从Derived到Base的转换,正是依赖U*到T*的隐式转换在初始化列表中完成类型安全 阅读详情

相关推荐

明明是一个通用指针类型, 为什么运行期可以找到正确的类对象?RTTI机制的原理?编程语言不同形态的“指针“?restrict是如何限定指针访问的?智能指针?编程语言的反射?

一般而言,编译器会生成对应类的相关讯息,并让创建的对象指向相应的讯息,保存在内存中。不管是ObjC的id类型,还是C++基类指针,运行期可以正确找到对应的父类或者子类,根源在二者都有一套查找到正确对象的机制。

编程语言开发、框架原理、编程思想、最佳实践技巧经验分享。致力于各种编程技术的技巧经验干货分享,讲解开发避坑技巧,追踪开发前沿技术,实战展开解决难题。 程序员小迷助您在编程路上越走越好! 777

C++智能指针全面解析:原理、应用与实战示例

C++智能指针全面解析:原理、应用与实战示例

世界那么大,我想去看看~【随心更新,看世界去了😄】 1548

C++智能指针

什么是内存泄漏: 内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害: 长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。//1.内存申请了忘记释放//2.异常安全问题Func();//如果Func函数抛异常会导致delete[] p3未执行,p3没被释放。

m0_62183318的博客 947

Rust 智能指针深入浅出

《Rust智能指针全面解析》摘要: Rust智能指针是管理内存的高级工具,兼具指针功能和额外管理能力。主要类型包括:Box<T>用于单一所有权堆分配;Rc<T>实现单线程引用计数共享;RefCell<T>提供内部可变性;Arc<T>支持线程安全共享;Mutex<T>确保线程间安全修改。智能指针通过Deref和Drop trait实现解引用和资源清理,可组合使用(如Rc<RefCell<T>>或Arc<Mutex<

萧曳丶 956

FPGA实战:给你的UART串口通信加上Verilog奇偶校验位(Modelsim仿真验证)

本文详细介绍了如何在FPGA中实现UART串口通信的Verilog奇偶校验功能,包括发送端校验位生成和接收端校验检测的设计与实现。通过Modelsim仿真验证,确保数据传输的可靠性,适用于嵌入式系统和数字通信领域。

weixin_34216614的博客 341

AJ-Report开源数据大屏存在远程命令执行漏洞

该平台可以通过post方式在validationRules参数对应值中进行命令执行,可以获得服务器权限,登陆管理后台接管大屏。如果被攻击者利用,危害后果十分严重。

swordheart的博客 387

【C++】智能指针

讲解C++智能指针的原理,内存泄漏的危害,分析三种智能指针的功能和原理!

YoungMLet的博客 2511

【Aseprite】制作Unity2D瓦片地图素材(平台游戏)

本文章用于记录用Aseprite软件制作2D平台游戏的瓦片地图的方法。

凡心所向,素履以往 5543

智能指针/内存泄露/类型转换

不需要显式地释放资源。采用这种方式,对象所需的资源在其生命期内始终保持有效。//RaII它是一种通对象生命周期控制程序资源,构造的时候进行资源分配,析构的时候进行一个资源的释放!public://下面就是像指针一样正常使用!T& operator*()//*被用了以后实际上是调用的重载函数,返回对象所关联的目标值Smart_ptr(Smart_ptr<T>& pp):_ptr(pp._ptr)//管理权转移!

popingcat的博客 1195

【codex教程】Codex 注册和使用教程(2026最新版)

Codex 是 OpenAI 推出的 AI 编程助手,可以帮助开发者阅读代码、修改代码、运行命令、生成测试、排查 bug、做代码审查,也可以在终端、IDE、Codex App 或网页端使用。根据 OpenAI 帮助中心,截至 2026 年 6 月,Codex 已包含在 Free、Go、Plus、Pro、Business、Edu 和 Enterprise 等 ChatGPT 方案中,但不同套餐的使用额度会有所不同。适合开发者在终端中使用。如果你想在命令行里使用 Codex,可以安装 Codex CLI。

与时俱进,开放共享 2万+

一口气看完TransformerXL详细解释带代码一:相对位置编码

相对位置编码(Relative Position Encoding)是Transformer模型中用于捕捉序列元素间相对位置关系的一种方法,与绝对位置编码(如BERT中的固定位置嵌入)不同,它直接建模元素之间的相对距离,从而更灵活地处理长序列或不同长度的序列。1. 为什么需要相对位置编码?​。

m0_73426548的博客 1426

C++面试题(四)——智能指针的原理和实现

普通C++面试时候的一般都是这个套路: 1,C++和C相比最大的特点——面向对象:封装,继承,多态。 2,你知道虚函数吗?——实现多态所必须,父类类型的指针指向子类的实例,执行的时候会执行之类中定义的函数。 3,析构函数可以是虚函数吗?——如果有子类的话,析构函数必须是虚函数。否则析构子类类型的指针时,析构函数有可能不会被调用到。 4,多态的实现。—

算法的天空 5万+

华大 HC32F460 DMA数据传输实战:从配置到中断处理的完整指南

本文提供了华大半导体HC32F460微控制器DMA(直接内存访问)功能的完整实战指南。详细解析了DMA的配置流程、中断处理机制以及软件与硬件触发方式,并附有实验代码示例。通过合理使用DMA进行数据传输,可以显著解放CPU资源,提升嵌入式系统的实时性与运行效率。

weixin_29194255的博客 251

智能指针的原理及实现

智能指针 1 智能指针的作用       智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源 2 智能指针的种类         shared_ptr、unique_ptr、weak_ptr、auto_ptr  (1) shared_ptr        ...

lizhentao0707的博客 2万+

NTN(三) Timing

这篇看下k_offset和k_mac,如38.300所述,k_offset是配置的调度偏移量,需要大于或等于service link RTT和Common TA之和;k_mac 是配置的偏移量,需要大于或等于 RP 和 gNB 之间的 RTT。 相关参数会通过RRC层NTN-config配置,其中的cellSpecificKoffset-r17和kmac-r17主要用于各种Timing场景的偏移。 kmac:如果DL和UL frame timing 在 gNB端未对齐,网络端

asd199086的博客 4826

Altium Designer (AD) 设计软件高频面试题及参考答案(3万字长文)

在Altium Designer(AD)中,设计复用是一种关键的策略,它允许设计师在多个项目中重复使用经过验证的设计元素,如原理图符号、PCB布局、元器件封装和设计规则集。在Altium Designer (AD) 中,手动布线和交互式布线是PCB设计中常见的两种布线模式,它们提供了设计师对布线路径的直接控制,特别是在处理复杂或关键信号路径时尤为有用。在Altium Designer (AD) 中进行电路级仿真是一项重要的设计验证步骤,它允许设计师在实际制造之前对电路的行为进行预测和分析。

大模型大数据攻城狮的专栏 4782

【C++11】智能指针

C++11智能指针

weixin_67401157的博客 486

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c++学习:智能指针的底层作用原理+用法

如果分配了一个内存空间,但后面又忘记释放空间,会造成内存泄漏,智能指针就可以自动释放空间,避免内存泄漏。

weixin_59669309的博客 758

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【C++笔记】C++11智能指针的使用及其原理

哈喽,各位小伙伴大家好!上期我们讲了C++的异常机制。今天我们来讲一下C++智能指针的使用及其原理。话不多说,我们进入正题!向大厂冲锋什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存,一般是忘记释放或者发生异常释放程序未能执行导致的。内存泄漏并不是指内存在物理上的消失,而是是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:普通程序运行⼀会就结束了出现内存泄漏问题也不大,进程正常结束,页表的映射关系解除,物理内存也可以释放。

大白的编程日记. 2048

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

<C++11> 智能指针

C++11智能指针auto_ptr、unique_ptr、shared_ptr、weak_ptr讲解与模拟实现

prodigy623的博客 954
上一篇: 怎么避免内存碎片化
下一篇: 缓存未命中
C++_girl
博客等级 码龄7年 32粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值