首页
题库
面试
求职
课程
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你回答一下智能指针有没有内存泄露的情况
[问答题]
请你回答一下智能指针有没有内存泄露的情况
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(47)
分享
纠错
9个回答
添加回答
5
牛客491461653号
有 shared_ptr 相互引用造成的死锁 引用计数失效 利用weak_ptr 替换其中一个share_ptr
发表于 2022-05-18 15:21:33
回复(0)
2
在写面经的小饼干很坚定
虽然智能指针可以帮助我们自动管理内存,但是在特定情况下仍然可能出现内存泄漏的情况。一种可能的情况是循环引用。当两个或多个对象相互引用时,它们的引用计数都不会变为 0,导致内存泄漏。这种情况可以使用 weak_ptr 来解决,打破其中一个对象对另一个对象的强引用。另一种情况是使用智能指针时需要注意避免出现裸指针。如果使用智能指针管理的对象同时被裸指针引用,那么当智能指针释放内存时,裸指针仍然指向已经被释放的内存,导致内存泄漏或者悬空指针等问题。因此,在使用智能指针时应该尽量避免使用裸指针。总之,虽然智能指针可以帮助我们自动管理内存,但是在使用时还是需要注意避免出现循环引用和裸指针等问题,以避免内存泄漏和悬空指针等问题。
发表于 2023-07-24 21:25:18
回复(0)
2
牛客257134597号
还有一种情况,可以去看Effective C++的条款17
发表于 2022-09-11 19:54:50
回复(0)
1
学不明白
当两个类对象中各自有一个 shared_ptr 指向对方时,会造成循环引用,使引用计数失效,从而导致内存泄露(类似死锁的思想)。 为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但是不会指向引用计数的共享内存,但是可以检测到所管理的对象是否已经被释放,从而避免非法访问。
发表于 2022-07-31 13:34:14
回复(0)
0
_helios_
智能指针有内存泄露的情况:当两个类对象中各自有一个 shared_ptr 指向对方时,会造成循环引用,使引用计数失效,从而导致内存泄露。 为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但是不会指向引用计数的共享内存,但是可以检测到所管理的对象是否已经被释放,从而避免非法访问。
发表于 2024-05-21 16:02:58
回复(0)
0
MasterAA
shared_ptr引用环。或者错误的内存操作,修改了智能指针中的内部数据,会导致内存泄漏。
发表于 2024-03-29 19:43:35
回复(0)
0
雏鹰划空
1. 有,就是shared_ptr<>使用的时候会出现循环引用的情况。 2. 为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但是不会指向引用计数的共享内存,但是可以检测到所管理的对象是否已经被释放,从而避免非法访问。
发表于 2023-11-11 16:43:31
回复(0)
0
cppers
一般情况下没有 特殊情况:就是share_ptr用循环引用的问题时就会造成内存泄漏。 解决方法:将其中的一个share_ptr替换成weak_ptr,这个智能指针的构造函数和析构函数不会改变引用计数的数量,不干涉对象的内存管理,当检测到引用计数为0时就会释放,避免内存的泄露。
发表于 2023-09-14 10:44:35
回复(0)
0
Mr☆Rabbit♂
循环引用,当多个shared_ptr互相引用的时候就会造成循环引用,导致内存无法正确释放。可以通过weak_ptr来解决shared_ptr的循环引用的问题
发表于 2023-08-15 07:08:51
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
C++
上传者:
real19931
难度:
9条回答
47收藏
1475浏览
热门推荐
相关试题
运行 ldd hello 可以得到...
百度
C++
评论
(3)
虚拟存储器不能解决的问题是()
操作系统
评论
(3)
下列UML图中不是UML2规范新增...
UML
评论
(1)
()不是UML体系的组成部分。
UML
评论
(1)
UML中关联的多重度是指()
UML
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题