【C/C++】【智能指针】shared_ptr循环引用 循环引用问题 “循环引用”简单来说就是:两个对象互相使用一个shared_ptr成员变量指向对方的会造成循环引用。导致引用计数失效。 即A内部有指向B,B内部有指向A,这样对于A,B必定是在A析构后B才析构,对于B,A必定是在B析构后才析构A,这就是循环引用问题,违反常规,导...
智能指针是用法和行为类似于指针的类对象。 智能指针的底层对原始指针做了一定的封装。 智能指针除了像指针一样可以存储变量的地址,还提供了其他功能,比如可以管理动态内存分配,对引用进行计数等。 当智能指针所指向的变量离开了作用域或被重置时,智能指针会自动释放该变量所占用的堆内存资源。 至于为什么要引入智能指...
🔗 智能指针三剑客之 weak_ptr - 打破循环引用的救星! 还在为 shared_ptr 循环引用导致的内存泄漏而烦恼吗? 😫 weak_ptr 来救场啦! 它就像是 shared_ptr 的好朋友,可以观察但不会干扰计数,完美解决循环引用问题! 🦸♂️ 为什么需要它? 🤔 想象这个场景:你有两个类互相引用对方。如果都用 shared_...
weak_ptr旨在解决shared_ptr之间的死锁问题。它提供弱引用,不会增加对象引用计数。weak_ptr可以转化为shared_ptr,反之亦然。在相互引用的shared_ptr中,weak_ptr可以帮助资源在适当的时候释放。总结,智能指针在内存管理上提供了强大支持,它们通过自动调用析构函数,避免内存泄露,同时根据需求提供独占、共...
说下你对智能指针的理解 因为C++使用内存的时候很容易出现野指针、悬空指针、内存泄露的问题。所以C++11引入了智能指针来管理内存。有四种: auto_ptr:已经不用了 unique_ptr:独占式指针,同一时刻只能有一个指针指向同一个对象 shared_ptr:共享式指针,同一时刻可以有多个指针指向同一个对象 ...
本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。 为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new语句时,一般就会立即把delete语句直接也写了,但是我们不能避免程序还未执行到delete时就跳转了或...
01_C语言提高_day02_14_指针做参数输入输出特性_rec是传智黑马C/C++第13期教程的第382集视频,该合集共计736集,视频收藏或关注UP主,及时了解更多相关视频内容。
首先我们需要一个指针reference来指向资源,当智能指针构造时,用reference指针指向资源,在我们确定资源应该被析构时,我们对reference指针进行delete。 如果只有reference指针的话,只能实现出auto_ptr的效果,我们还需要添加引用计数系统counter来统计指向资源的智能指针的个数。counter不可以是一个普通的int型变量,因为不同的智...
1. 手动解除引用:在程序中显式地解除对象之间的引用关系,确保在释放内存之前将循环引用解除。 2. 弱引用:使用弱引用来代替强引用,避免形成循环引用。弱引用是指对对象的引用不会增加其引用计数,当对象的引用计数为0时,对象会被自动释放。 3. 使用智能指针:智能指针是一种自动管理内存的指针,可以在对象不再被引用...
share_ptr 虽然已经很好用了,但是有一点 share_ptr 智能指针还是有内存泄露的情况:例如当两个 shared_ptr 相互引用时,析构时两个资源时引⽤计数会减⼀,但是两者引⽤计数还是为1,永远不可能下降为0,也就是资源永远不会释放,从而导致内存泄漏。 weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 ...