C++中的智能指针shared_ptr和unique_ptr怎么使用


这篇文章主要介绍“C++中的智能指针shared_ptr和unique_ptr怎么使用”,在日常操作中,相信很多人在C++中的智能指针shared_ptr和unique_ptr怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中的智能指针shared_ptr和unique_ptr怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!基本用法: 可以通过构造函数, make_shared辅助函数和reset()方法来初始化shared_ptr1. 初始化方法优先使用make_shared来构造, 更加高效不能用一个原始指针直接赋值智能指针, 以下方式是错误的2.获取智能指针的原始指针: 通过get方法3.指定删除器:自定义指针销毁方式第二个参数指定删除器(一个可调用对象, 其中参数为该类型的指针, 如上面为int*)当shared_ptr引用计数为0时, 调用传入的而不是默认的删除器来释放对象的内存当用shared_ptr管理动态数组时, 需要指定删除器, 因为shared_ptr默认删除器不支持数组对象如下使用lambda表达式作为删除器通过default_delete作为删除器, 同时封装一个make_shared_array函数来支持数组(自测)貌似这样也支持数组(1)不要用一个原始指针初始化多个shared_ptr(2)不要在函数实参中创建shared_ptr参数的计算顺序可能没有固定顺序, 若是new int后执行g()抛出异常, 则shared_ptr还没有创建, 则new int内存泄漏了(3)不要用this指针构造shared_ptr作为返回值destructordestructor以上代码p1和p2相当于同一个new A初始化, 会shared_ptr销毁时, 会重免费云主机域名复析构正确做法:让该类继承enable_shared_from_this, 同时调用shared_from_this()返回destructor只要用shared_ptr, 调用的成员函数里都不能使用this构造, 否则都会出错另外, 不要在构造函数里使用shared_from_this(4)避免循环引用以下代码会由于循环引用, 引用计数值都为1, 导致两个指针都不会析构//没有输出unique_ptr不允许复制, 不允许其他的智能指针共享其内部的指针, 但可以转移自定义make_unique函数且让其支持定长数组思路不是数组, 返回unique_ptr是数组且非定长数组, 返回unique_ptr, 即不应该调用make_unique(10)而是make_unique(10)最后过滤掉该定长数组(函数声明为delete)不过unique_ptr本身也支持数组, shared_ptr自测也支持, 如下unique_ptr也支持删除器, 但和shared_ptr有区别, 要指定删除器类型如果希望lambda删除器捕获变量, 则需要用function包装到此,关于“C++中的智能指针shared_ptr和unique_ptr怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: es6的set怎么使用

这篇文章主要讲解了“es6的set怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6的set怎么使用”吧! Set是一种用于存储有序数据数据结构,Set中的元素具有唯一性,不允许存储相同的元素;Se…

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

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/29 19:38
Next 03/29 19:38

相关推荐