c++相关(类 stdshared_ptr 用weak_ptr打破循环引用)
智能指针循环引用:
当两个shared_ptr智能指针调用两个相互调用的类的时候依然会存在内存泄露的情况,因为只有到user_count=0的时候才能释放该智能指针相互都在等待对方释放资源:
用weak_ptr可以打破智能指针循环引用所出现的问题。
当外部有share_ptr在管理weak_ptr资源时则该指针是有效的,否则无效用lock()来控制
如果调用reset()后再调用lock()永远只会false,如果reset一个new资源原有的也会false,再=obj时weak_ptr指针就会又有效,可以用weak_ptr的expired()函数来判断该指针是否有管理资源
只要让shared_ptr循环引用中打破一环,shared_ptr就能发挥它应有的作用,下例程序可正常运行: