【C/C++】【智能指针】shared_ptr循环引用 循环引用问题 “循环引用”简单来说就是:两个对象互相使用一个shared_ptr成员变量指向对方的会造成循环引用。导致引用计数失效。 即A内部有指向B,B内部有指向A,这样对于A,B必定是在A析构后B才析构,对于B,A必定是在B析构后才析构A,这就是循环引用问题,违反常规,导...
然而,在使用智能指针时,循环引用是一个常见的问题,可能会导致内存泄漏和程序崩溃等问题。本文将介绍智能指针循环引用的原因、危害以及解决方法等内容。 一、循环引用的原因 循环引用是指两个或多个对象相互持有对方的指针或引用,形成一个环状结构,导致内存无法正确释放。在使用智能指针时,循环引用通常是由于以下原因造成...
1.智能指针通过RAII方法来管理指针:构造对象时,完成资源初始化;析构对象时,对资源进行清理及汕尾. 2.auto_ptr,通过“转移所有权”来防止析构一块内存多次.(如何转移?详情看第二篇文章) 3.scoped_ptr,不“转移所有权”而是禁止拷贝/赋值对象.(C++如何禁止拷贝对象?详情看第三篇文章) 4.shared_ptr,通过"引用计...
循环引用指的是两个或多个对象之间互相引用,形成一个环形结构。在智能指针中,循环引用会导致内存泄漏,因为智能指针的引用计数永远不会到达零,从而导致对象无法被正确释放。 为了解决这个问题,C++11引入了weak_ptr,可以在循环引用的情况下保证正确的内存释放。weak_ptr是一种弱引用,它不会增加对象的引用计数,只是跟踪...