C++-对四个智能指针:shared_ptr,unique_ptr,weak_ptr,auto_ptr的理解
创始人
2024-05-31 05:23:13
0

回答如下:

C++的智能指针是一种特殊类型的“指针”,其主要目的是自动跟踪内存分配和释放,以避免程序中出现内存泄露或空悬指针等问题,主要采用的技术是:借助于类的生命周期,当超出了类的作用域时,类对象会自动调用析构函数,然后就可以释放内存等资源,无需手动回收。在C++中,有四种主要类型的智能指针:auto_ptr,unique_ptr,shared_ptr,weak_ptr。

  • auto ptr 实现了智能指针的基本功能持有资源的模式为独占型。实现独占型资源的方式为赋值构造和赋值拷贝函数,在调用这些函数时,会进行资源所有权的转移。比如,当将一个auto ptr P1赋值给另一个auto ptr P2时,资源就从 P1 转移到了 P2,这也意味着此时 P1 中已经不存在资源,这会导致存在潜在的内存崩溃问题

  • unique ptr 是auto ptr 的升级版持有资源的模式为独占型。因为C++11支持了移动构造和移动赋值函数,实现独占资源的方式不再是拷贝构造和拷贝赋值函数,因此,当将一个auto ptr P1赋值给另一个auto ptr P2时,编译器会报错,解决了auto ptr 赋值后指向无效数据的问题,如果实在需要像auto ptr那样赋值,可以使用 std::move函数,将P1转为右值处理,但这意味着要确保不再使用P1,否则将也会出现类似 auto ptr 内存崩溃的问题。

  • shared ptr 它是unique ptr 的升级版,不在限于一个智能指针持有一个资源,实现为共享型资源,多个智能指针可以指向相同的对象,实现方式为引用计数机制,通过计数来表明资源被几个智能指针引用和共享,当计数为0时,说明资源已经不再被任何智能指针使用,从而可以进行释放资源的操作。

  • weak ptr 它是为了解决 shared ptr 存在的相互引用导致资源死锁的问题:如果说两个shared_ptr相互引用,那么这两个指针的引用计数永远不可能下降为0,资源永远不会释放。weak ptr它不持有资源,只提供对资源的访问手段,是对象的一种弱引用,所以不会引起引用计数的变化。

总之,智能指针是一种方便而强大的C++编程工具,可以帮助程序员避免内存泄漏和空悬指针等问题,并提高代码的可读性和可维护性。尽管这些指针在使用上有一些限制和注意事项,但它们仍然是一种非常有用的工具,值得我们深入了解和掌握。

相关内容

热门资讯

安卓系统如关闭微信 你有没有想过,手机里的微信是不是有时候太占内存了?或者,你只是想给手机来个彻底的大扫除,那么,关闭安...
按键精灵安卓系统命令,按键精灵... 你有没有想过,在手机上玩游戏或者处理一些重复性任务时,是不是能有个小助手帮你轻松搞定呢?没错,今天就...
qq飞车安卓系统怎么转移苹果系... 你是不是也和我一样,对QQ飞车这款游戏爱得深沉呢?不过,最近换了个新手机,从安卓系统换到了苹果系统,...
安卓手机系统bug大全,全面解... 你有没有遇到过那种让人抓狂的安卓手机系统bug?那种让你觉得手机突然变成了“智障”的感觉,真是让人头...
华为怎么改安卓系统,打造独特用... 你有没有发现,华为的手机用起来就是不一样?那流畅的体验,那独特的系统,简直让人爱不释手。但是,你知道...
安卓手机驱动电脑系统,探索跨界... 你有没有想过,你的安卓手机竟然能成为电脑的得力助手?没错,就是那个你每天不离手的安卓手机,现在它不仅...
电脑怎么给安卓系统安装,详细步... 你有没有想过,你的安卓手机或者平板电脑,怎么才能装上那些让你眼前一亮的新系统呢?别急,今天就来手把手...
看戏机安卓4.2系统,畅享视听... 你有没有想过,在手机上也能体验看戏的乐趣?没错,就是那种坐在家里,就能欣赏到精彩戏曲的感觉。今天,我...
手机安卓系统版本更新,从初代到... 你有没有发现,你的手机最近是不是总在提醒你更新安卓系统呢?没错,手机安卓系统版本更新,这个话题可是最...
安卓系统不好怎么解决 你是不是也和我一样,对安卓系统的小毛病头疼不已?手机卡顿、电池续航短、广告满天飞,这些问题是不是让你...
安卓系统硬件装在哪里,揭秘硬件... 你有没有想过,那个陪伴你每天刷抖音、玩游戏、办公的安卓系统,它其实就藏在你手中的那块小小的硬件里呢?...
王者系统转换软件安卓,轻松实现... 你有没有想过,你的手机里那些游戏,是不是也能来个华丽丽的变身呢?没错,今天就要给你揭秘一个神奇的小玩...
安卓手机id转苹果系统,轻松实... 你有没有想过,把安卓手机上的ID转到苹果系统上呢?这听起来是不是有点像魔法一样神奇?别急,今天我就要...
不要默认安卓系统的短信,探索无... 你有没有发现,手机里的短信功能好像变得有点不一样了呢?没错,就是那个我们每天都要用的安卓系统短信,它...
原生系统安卓卡刷包,轻松升级体... 你有没有遇到过这样的情况:手机用着用着就卡了,尤其是那些搭载了原生安卓系统的手机,有时候真的让人头疼...
华为能安装安卓系统,畅享智能生... 你有没有想过,华为的手机竟然也能安装安卓系统呢?这可不是什么天方夜谭,而是实实在在的技术突破。今天,...
安卓9.0系统好在哪,引领智能... 你有没有发现,你的手机最近是不是变得聪明多了?没错,这就是安卓9.0系统的魔力!今天,就让我带你一起...
安卓与系统有联系吗,揭秘二者之... 你有没有想过,你的安卓手机里那些花花绿绿的图标背后,其实隐藏着一个庞大的系统世界?没错,安卓与系统之...
z8350安卓系统内存,性能与... 你有没有发现,现在手机更新换代的速度简直就像坐上了火箭!这不,最近有个小伙伴问我:“你知道z8350...
安卓手机车机系统推荐,安全便捷... 你有没有想过,你的安卓手机车机系统是不是该换换口味了?想象当你驾驶着爱车,车载系统就像你的贴心小秘书...