C++智能指针怎么创建和使用


今天小编给大家分享一下C++智能指针怎么创建和使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。优缺点:智能指针由原始指针的封装,优点是可以自动分配内存,不用担心内存泄漏问题。用于解决独占/共享所有权指针的释放,传输等问题。但是没有原始指针方便。都是围绕独免费云主机域名占展开特点一: 如其名,独占。也就是说同一个内存空间同时只能有一个指针来管理。这么写编译器不会报错,但运行时会提示 error:double free detected in tcache 2这也就印证了第一个特点,一个内存区域只能由一个指针管理。特点二: 当指针超出作用域时,内存自动释放可见传统指针在局部作用域中开辟的内存在外部同样可以访问,也就是说我们使用传统指针开辟内存之后在离开作用域时需要加上释放内存的操作,不然会造成内存泄漏。而智能指针我们不需要手动释放内存,在离开作用域后会自动释放。特点三:由于特点一,修改指针不可以copy ,只能Move(转移归属权)也就是说,通过move函数,把指针u_pi1所指内存中的值掏空,然后安到指针u_pi2所指的内存上。方式一: 通过已有的传统指针创建方式二: 通过new方法创建方式三: 通过std :: make_unique创建方式一: 通过move(),转移拥有权.注意:将指针的拥有权转入函数中后,在原作用域指针将被释放,而该指针将在函数调用结束时释放。也就是说,将智能指针以move的形式传入函数后,在原作用域不能再使用该指针。方式二: 通过引用传递注意: 将指针以引用的方式传入函数,那么该指针在原作用域依然存活,并可以和所调用函数共同操作该内存空间数据。方式三: 链式传递通过get()获取地址可以通过->调用成员函数可以通过*调用解引用通过reset()清空指针用已有指针创建时,没有及时清空传统指针,导致同时有两个指针指向这块已经被“独占”的区域。特点一: 可以通过copy共享内存。特点二: 通过use_count();来查看计数 ,copy 计数加一,销毁计数减一。特点三: 无论多少指针,都同用一份数据,因而同一份数据的use_count()一致。本质不变,在函数调用中,因为本身支持复制操作,所以不用加move可以直接传递。并且在传递到函数中,use_count() 会增加,并在函数销毁时候还原。在函数中修改指向的值,在外部的指针指向的值也会改变。使用引用传递,则在传递到函数中时,计数不会增加。输出:1 2 1share_ptr带来的循环依赖问题解决:将_friend属性改为weak_ptr 。weak_ptr 是一个不需要所有权的指针,所以我们可以通过用weak_ptr来声明属性,解决循环依赖可以通过lock()来将weak_pte升级为shared_ptr;以上就是“C++智能指针怎么创建和使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: 如何使用Java实现大小写转换

这篇文章主要介绍“如何使用Java实现大小写转换”,在日常操作中,相信很多人在如何使用Java实现大小写转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java实现大小写转换”的疑惑有所帮助!接下来,请跟着小编一起来学…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/30 22:08
下一篇 03/30 22:08

相关推荐