智能指针总结

本文详细解释了智能指针如何用于堆内存管理,通过引用计数机制确保内存的有效释放,避免内存泄漏。重点讨论了如何在不同指针间共享内存资源,以及内存使用完毕后的正确释放流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


解释一

智能指针用于内存管理,主要是用于对堆上面开辟的内存的管理,具体采用引用计数的机制进行。比如我们在栈上开辟了一块内存m1,并将其赋值给指针p1,那么现在m1这块内存就有一个对象在使用,引用计数为1。这时如果有另外一个指针p2也需要使用m1的内容,那么就将p2也指向m1。问题在于,如果p1使用完毕之后,使用delete语句告诉系统,这块内存我不用了,把它回收吧,那么这时p2还在指着m1的话,再次使用p2的时候就会出问题了。


然后就引入了引用计数的概念。所有的栈上的内存,在还没有被开辟的时候,该块内存的引用计数为0,在第一次用p1开辟的时候引用计数+1变成1,如果有其他指针也需要这块内存,比如一个潜copy操作,比如p2,那么这时候就有两个指针指向m1,引用计数变成2,当p1用完了,就用一个操作切断p1和m1的关系,m1的引用计数变成1。当p2也用完了,那么通过一个操作引用计数再次减去1,引用计数变成0。当智能指针这个对象发现它管理的内存引用计数变成0的时候,对m1做一个delete操作,使之释放






链接:http://blog.youkuaiyun.com/hackbuteer1/article/details/7561235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值