当前位置: 首页 > 面试题库 >

请你回答一下智能指针有没有内存泄露的情况 ?

柴增
2023-03-14
本文向大家介绍请你回答一下智能指针有没有内存泄露的情况 ?相关面试题,主要包含被问及请你回答一下智能指针有没有内存泄露的情况 ?时的应答技巧和注意事项,需要的朋友参考一下

当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。例如:img

img

img

上述代码中,parent有一个shared_ptr类型的成员指向孩子,而child也有一个shared_ptr类型的成员指向父亲。然后在创建孩子和父亲对象时也使用了智能指针c和p,随后将c和p分别又赋值给child的智能指针成员parent和parent的智能指针成员child。从而形成了一个循环引用:

 类似资料:
  • 本文向大家介绍请你来说一下智能指针的内存泄漏如何解决?相关面试题,主要包含被问及请你来说一下智能指针的内存泄漏如何解决?时的应答技巧和注意事项,需要的朋友参考一下 为了解决循环引用导致的内存泄漏,引入了weak_ptr弱指针,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但不指向引用计数的共享内存,但是其可以检测到所管理的对象是否已经被释放,从而

  • 本文向大家介绍请你回答一下如何判断内存泄漏?相关面试题,主要包含被问及请你回答一下如何判断内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 内存泄漏通常是由于调用了malloc/new等内存申请的操作,但是缺少了对应的free/delete。为了判断内存是否泄露,我们一方面可以使用linux环境下的内存泄漏检查工具Valgrind,另一方面我们在写代码时可以添加内存申请和释放的统计功能,统计当

  • 本文向大家介绍请你回答一下野指针是什么?相关面试题,主要包含被问及请你回答一下野指针是什么?时的应答技巧和注意事项,需要的朋友参考一下 野指针就是指向一个已删除的对象或者未申请访问受限内存区域的指针。

  • 本文向大家介绍请你介绍一下C++中的智能指针?相关面试题,主要包含被问及请你介绍一下C++中的智能指针?时的应答技巧和注意事项,需要的朋友参考一下 智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,记录当前内存资源被多少个智

  • 本文向大家介绍请你来说一下智能指针shared_ptr的实现?相关面试题,主要包含被问及请你来说一下智能指针shared_ptr的实现?时的应答技巧和注意事项,需要的朋友参考一下 核心要理解引用计数,什么时候销毁底层指针,还有赋值,拷贝构造时候的引用计数的变化,析构的时候要判断底层指针的引用计数为0了才能真正释放底层指针的内存** template **class SmartPtr{private

  • 本文向大家介绍请你来回答一下什么是memory leak,也就是内存泄漏 ?相关面试题,主要包含被问及请你来回答一下什么是memory leak,也就是内存泄漏 ?时的应答技巧和注意事项,需要的朋友参考一下 内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制