【C++11】智能指针

这篇具有很好参考价值的文章主要介绍了【C++11】智能指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是智能指针:

        智能指针是一个,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源。

 裸指针的缺点:

1.难区分执行一个或多个对象

2.难以判断是否该销毁,有没有多次销毁

3.难以缺点delete还是delete[]

常见智能指针:

auto_ptr、unique_ptr、shared_ptr、weak_ptr;

auto_ptr在C++11中被舍弃:不支持对象数组操作、赋值和复制会改变资源的所有权。

RAII获取资源即初始化

        充分地利用了c++语言局部对象自动销毁的特性来控制资源(内存heap、网络套接字、互斥量,文件句柄等)的生命周期。

 RALL过程中的四个步骤

  1. 设计一个类封装资源
  2. 在构造函数中初始化
  3. 在析构函数中执行销毁操作
  4. 使用时定义一个该类的局部对象

unique_ptr唯一型智能指针

        指针、资源一对一。不能两个指针指向一个地址,所以不支持普通赋值和拷贝构造,需要用移动构造和移动赋值。

shared_ptr共享型智能指针

        shared_ptr内有两个指针,_Ptr和_Rep;

_Ptr指向申请的空间,_Rep指向_Uses和_Weaks,创建指针后_Uses默认为1、_Weaks默认为1;

_Uses记录有多少个共享指针指向那个空间;

当_Uses值为0时,_Weaks也变为0,释放空间,指针置为空。

weak_ptr弱指针

        弱引用指针weak_ptr监视shared_ptr的生命周期,没有*->操作。

weak_ptr需要shared_ptr实例来初始化,同样有_Ptr和_Rep,当创建弱指针时,_Weaks+1

use_count()可以获取当前有几个共享性智能指针指向该资源即_Uses的值

//创建弱指针
int main()
{
    shared_ptr<int> pa(new int(10));
    weak_ptr<int> wp(pa);
}

expired()方法

        弱指针 expired() 方法用于检查所指向的对象是否已经被销毁,返回值是一个 bool 类型的变量,如果所指向的对象已经被销毁,则返回 true,否则返回 false。

        在某些情况下,我们需要检查所指对象是否还存在,以避免程序出现空指针异常或者未定义行为。这时就可以使用 weak_ptr 的 expired() 方法来判断所指对象是否已经被销毁,从而避免出现访问已经不存在的对象的情况。

lock()方法

        lock()方法获取所监视的shared_ptr

       弱指针是一种不拥有所指对象的智能指针,它只是对所指对象的一个观察者,因此它不能直接访问所指对象,而是需要通过转换为 shared_ptr 或者使用 lock() 方法获取一个 shared_ptr,然后才可以访问所指对象。

对于lock()返回的共享型智能指针一定要判断一下是否存在,存在与不存在lock都会返回指针。文章来源地址https://www.toymoban.com/news/detail-462989.html

shared_ptr<int>sp(new int(10));
weak_ptr<int> gw(sp);
shared_ptr<int>spt = gw.lock();
if(spt)
{
    //使用spt
}

到了这里,关于【C++11】智能指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++11(三)】智能指针详解--RAII思想&循环引用问题

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C++   🔝🔝 相信学C++的同学或多或少的听说过 智能指针这个词,博主刚听见这个词时 ,觉得它应该很复杂,并且很高大上,但不 管是多牛的东西,都是人写

    2024年02月04日
    浏览(46)
  • C++中的智能指针是什么

    C++是一种广泛使用的编程语言,它允许程序员使用动态分配的内存。然而,手动管理内存可能会导致一些严重的问题,如内存泄漏和悬空指针。为了解决这些问题,C++引入了智能指针的概念。智能指针是一种特殊的指针类型,它可以自动管理内存并确保在不需要时释放内存。

    2024年02月02日
    浏览(119)
  • C++面试八股文:什么是智能指针?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第19面: 面试官:什么是智能指针? 二师兄:智能指针是C++11引入的类模板,用于管理资源,行为类似于指针,但不需要手动申请、释放资源,所以称为智能指针。 面试官:C++11引入了哪些智能指针? 二师兄:三种,分别是 s

    2024年02月09日
    浏览(44)
  • C++11补充:智能指针如std::unique_ptr如何添加自定义的deleter

    关于智能指针的问题,有时候为了方便,需要在析构时附加一些清理操作,或者,有的指针本身来自C的库文件中,这时候,就非常期望能够使用自定义的deleter, 但是标准C++创建函数如std::make_unique / std::make_shared 等不支持创建带有自定义deleter的智能指针,这时,我们只能使用

    2024年02月07日
    浏览(48)
  • C++11 新特性 ⑥ | 智能指针 unique_ptr、shared_ptr 和 weak_ptr

    目录 1、引言 2、unique_ptr 3、shared_ptr 4、weak_ptr 5、shared_ptr循环引用问题(面试题)

    2024年02月09日
    浏览(49)
  • C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解

    目录 1、引言 2、什么是智能指针? 3、在Visual Studio中查看智能指针的源码实现 4、独占式指针unique_ptr 4.1、查看unique_ptr的源码实现片段 4.2、为什么unique_ptr的拷贝构造函数和复制函数被delete了?(面试题) 4.3、使用unique_ptr独占式智能指针的实例 5、共享式指针shared_ptr  5.1、查

    2024年02月08日
    浏览(44)
  • 一个指针式的时钟,12小时内时针和分针重复多少次,分别是什么时间

    之前看过一个鸡汤,说中国学生和国外学生,老师提出这个问题,仅是问重合多少次。中国学生拿出笔闷头算,国外学生直接拿出表直接调时间………… 但是这个问题如果是重合的具体时间如何用C语言算 结果 重复时间 小时: 1  分钟 5  重复时间 小时: 1  分钟 6  重复时间

    2024年02月10日
    浏览(72)
  • C#是什么?可以用来做什么?

            C#(读作“C Sharp”)是一种容易使用不复杂新型的编程语言,不仅是面向对象,它的类型还安全。C# 源于 C 语言系列,C、C++、Java 和 JavaScript 程序员很快就可以上手使用。C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和

    2024年02月21日
    浏览(39)
  • 什么是 Docker?它能用来做什么?

    云计算是一种资源的服务模式,该模式可以实现随时随地、便捷按需地从可配置计算资源共享池中获取所需的资源(如网络、服务器、存储、应用及服务),资源能够快速供应并释放,大大减少了资源管理工作开销,用户甚至可以再也不用理会那些令人头痛的传统服务供应商

    2024年02月02日
    浏览(36)
  • 【Docker】什么是Docker,它用来干什么

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包