欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

C++share

时间:2023-04-27

share_ptr指针涉及到循环引用问题会因为share_ptr指针对应的use_count()无法清0,导致内存泄露,直接上例子:

class S_B;class S_A{public:  shared_ptr m_b;}; class B{public:  shared_ptr m_a;}; int main(){  while (true)  {    shared_ptr S_a(new S_A); //S_A.use_count()=1    shared_ptr S_b(new S_B); //S_B.use_count()=1    S_a->m_b = S_b; //S_B.use_count()++    S_b->m_a = S_a; //S_A.use_count()++  }   //S_b先出作用域,S_B.use_count()--,此时S_B.use_count()=1,所以堆上的S_B空间没有被释放,由于S_B没有被释放,故不会调用析构函数释放内部的S_a,S_A.use_count()=2.   //S_a后出作用域,S_A.use_count()--,此时S_A.use_count()=1,所以堆上S_A的空间也没有被释放,S_A内部的S_b的引用依然没被释放 }

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。