share_ptr已经很好用了,但是有一点share_ptr智能指针还是有内存泄露的情况,当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。 weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的shared_ptr, weak
两个堆空间没有释放是因为指向它们的智能指针成员变量没有析构导致引用计数不为0,这个智能指针成员变量没有析构又是因为它们所属的堆对象没有析构,而这两个堆对象没有析构是因为它们被智能指针保管,该智能指针又被指向的堆对象的智能指针成员变量增加了引用计数。 解决的办法就是用weak_ptr取代智能指针成员变量,从...
share_ptr指针涉及到循环引用问题会因为share_ptr指针对应的use_count()无法清0,导致内存泄露,直接上例子: 1classS_B;2classS_A3{4public:5shared_ptr<S_B>m_b;6};78classB9{10public:11shared_ptr<S_A>m_a;12};1314intmain()15{16while(true)17{18shared_ptr<S_A> S_a(newS_A);//S_A.use...