《面向对象程序设计C++》课件1第3章 类和对象-动态内存与智能指针
29页1、2023/11/121 学习要点学习要点shared_ptrunique_ptrweak_ptr第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针2023/11/122 学习目标学习目标第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针了解三种智能指针shared_ptr、unique_ptr和weak_ptr2023/11/123shared_ptr:是一个模板类,定义在是一个模板类,定义在头文件里。头文件里。shared_ptr对象会在其作用域结束时,自动销毁,对象会在其作用域结束时,自动销毁,如果该如果该shared_ptr是指向某动态对象是指向某动态对象a的最后一个的最后一个shared_ptr,那么,那么a所在的内存会被释放。所在的内存会被释放。第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针2023/11/124unique_ptr:也是一个模板类,同样定义在也是一个模板类,同样定义在头文件头文件里。与里。与shared_ptr不同的是,不同的是,unique_ptr是自己是自己“拥有拥有”一个指向的对象,也就是说不允许有两
2、个或一个指向的对象,也就是说不允许有两个或者以上的者以上的unique_ptr指向同一个对象。在一个指向同一个对象。在一个unique_ptr对象的作用域结束时,对象的作用域结束时,unique_ptr指向指向的对象的内存被释放。为了保证的对象的内存被释放。为了保证unique_ptr对对象对对象的独有性,赋值、复制操作是不允许的。但有一个的独有性,赋值、复制操作是不允许的。但有一个例外,可以在函数中例外,可以在函数中return一个一个unique_ptr。第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针2023/11/125weak_ptr:同样也是一个模板类,定义在同样也是一个模板类,定义在 头文件头文件中。它是为了辅助中。它是为了辅助shared_ptr而引入的一种智能指而引入的一种智能指针,它是一种弱引用,指向针,它是一种弱引用,指向shared_ptr所管理的对所管理的对象,但不增加象,但不增加shared_ptr的引用计数。它存在的意的引用计数。它存在的意义就是协助义就是协助shared_ptr更好的完成工作,可以把它更好的完成工作,可以把它比做成一个秘
3、书或助理。比做成一个秘书或助理。第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针2023/11/126第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针shared_ptr sp空智能指针,可以指向类型为空智能指针,可以指向类型为T的对象的对象unique_ptr upp将将p作为一个判断条件,若作为一个判断条件,若p指向一个指向一个对象,则为对象,则为true*p解引用解引用p,获得它指向的对象,获得它指向的对象p-mem等价于等价于(*p).memp.get()返回返回p中保存的指针中保存的指针swap(p,q)交换交换p和和q中的指针中的指针p.swap(q)表表3-2 shared_ptr3-2 shared_ptr和和unique_ptrunique_ptr都支持的操作都支持的操作2023/11/127第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针make_shared(args)返回一个返回一个shared_ptr,指向一个动态分配,指向一个动态分配的类型为的类型为T的对象。使用的对象。使用args初始化此对初始化此对象
4、象shared_ptrp(q)p是是shared_ptr q的拷贝,此操作会递增的拷贝,此操作会递增q中的计数器,中的计数器,q中的指针必须能转换为中的指针必须能转换为T*p=qp和和q都是都是shared_ptr,所保存的指针必须,所保存的指针必须能相互转换,此操作会递减能相互转换,此操作会递减p的引用计数,的引用计数,递增递增q的引用计数,若的引用计数,若p的引用计数变为的引用计数变为0,则将其管理的原内存释放。,则将其管理的原内存释放。p.unique()若若p.use_count()为为1,返回,返回true,否则返,否则返回回falsep.use_count()返回与返回与p共享对象的智能指针数量,可能共享对象的智能指针数量,可能很慢,主要用于调试很慢,主要用于调试表表3-3 shared_ptr3-3 shared_ptr独有的操作独有的操作2023/11/1281、shared_ptr:/指向指向string类型的空指针,默认初始化的智能指针是一个空类型的空指针,默认初始化的智能指针是一个空指针指针shared_ptr p1;shared_ptr p2;/指向指向int类
5、型的空指针类型的空指针/指向一个值为指向一个值为10的的int类型的指针类型的指针shared_ptr p3(new int(10);第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针2023/11/1291、shared_ptr:/错误:不能将一个内置指针直接赋值给一个智能指针错误:不能将一个内置指针直接赋值给一个智能指针shared_ptr p4=new int(1);/p5为指向一个值为为指向一个值为1的的int类型的类型的shared_ptrshared_ptr p5=make_shared(1);第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指针2023/11/12101、shared_ptr:/p6为指向一个值为为指向一个值为9999999999的的string类型的类型的shared_ptrshared_ptr p6=make_shared(10,9);/p7指向一个值初始化的指向一个值初始化的int,即,值为,即,值为0shared_ptr p7=make_shared();第第3章章 类和对象类和对象-动态内存与智能指针动态内存与智能指
《《面向对象程序设计C++》课件1第3章 类和对象-动态内存与智能指针》由会员小萌新****ao分享,可在线阅读,更多相关《《面向对象程序设计C++》课件1第3章 类和对象-动态内存与智能指针》请在金锄头文库上搜索。
软件需求工程04
商务谈判与礼仪课件第三章 商务谈判心理、思维和动机
《复变函数与积分变换》1.3 复变函数
SQL Server数据库第4章 表数据操作
理财规划原理-课件第二章 宏观经济基础
《数据库原理与应用》PPT1第1章 数据库概述和SQL 2017开发环境
《软件工程与项目管理》1-3-软件工程概述(3)
商务智能(第5版)课件第2章 商务智能系统架构
《软件工程与项目管理》3-3-软件策划与项目计划(3)
《数据库原理与应用》PPT1第5章 数据库编程技术基础
《面向对象程序设计》实验指导书-
基础会计购买固定资产业务核算1
《软件项目管理与案例分析》课件第2章
《软件工程与项目管理》2-2-软件过程(2)
软件需求工程05
Access数据库创建、使用与管理从新手到高手课件第12章
《现代检测技术及仪表》课件第8章 机械量检测及仪表
Access数据库创建、使用与管理从新手到高手课件第5章
《面向对象程序设计C++》课件1第3章 类和对象-动态内存与智能指针
会计基础项目八20
2024-05-07 48页
2024-05-07 41页
2024-05-07 36页
2024-05-07 33页
2024-05-07 43页
2024-05-07 30页
2024-05-07 27页
2024-05-07 31页
2024-05-07 44页
2024-05-07 39页