第十二章:动态内存之智能指针

一:了解c++中的内存

通常把内存理解为四个部分:栈,堆,全局/静态存储区和常量存储区

:通常是局部变量,函数参数等的存储区,在编译期间就大小确定的存储区,大小为1MB。

:通常是在编译期间不能确定大小的存储区,就如动态内存分配(原先不知道到底要分配多少的空间),一般由malloc/new来分配,free/delete来释放,两个紧挨着的指针,内存那不一定是紧挨着的。

全局/静态存储区:在编译期间就确定大小的变量的存储区,用于在整个运行期间都可见的全局变量和静态变量

常量存储区:编译期间就确定大小的常量的存储区,全局可见,只不过里面存储的是常量,不能被修改。

 智能指针(定义在memory头文件)

①标准库提供两种智能指针:shared_ptr与unique_ptr。

shared_ptr允许多个指针指向一个对象,而unique_ptr独享一个对象

②还有一种weak_ptr的弱引用,指向shared_ptr所指向的对象。

shared_ptr类

定义的格式:

shared_ptr<int>p1;  //   p1是一个shared_ptr,可以指向一个int 类型的对象

shared_ptr<list<int>>p2;  //  p2是一个shared_ptr,可以指向int的list

**默认初始化的智能指针中保存着一个空指针。

④下面介绍几种不常见的操作(shared_ptr独有的)

make_shared<T>(args)       // 返回一个shared_ptr,指向一个动态分配的类型为T的对象,使用args初始化此对象

shared_ptr<T>p(q)             //p是q的拷贝,此操作递增p的计数器,递减q的计数器,前提是两者之间的指针类型能相互转换

p.unique()                          //若p.use_count()为1,返回true,否则返回false

p.use_count()                     //返回与p共享对象的智能指针的数量

make_shared函数(定义在memory头文件)

它的作用是安全的在动态内存中分配一个对象,并返回一个指向该对象的shared_ptr智能指针

格式为:

shared_ptr<int>p3=make_shared<int>(42);    //在指向一个值为42的int的shared_ptr

shared_ptr<string>p4=make_shared<string>(10,'9');   //指向一个值为‘9999999999’的string

shared_ptr<int>p5=make_shared<int>();指向一个值初始化为0的Int

一个更简单的格式为:auto p6=make_shared<vector<string>>();//p6指向一个动态分配的空vector<string>。

⑥shared_ptr的拷贝与赋值

每个shared_ptr 都有一个关联的计数器,通常称为引用计数,拷贝一个shared_ptr,该计数器递增;给shared_ptr附一个新值或者销毁它,就会递减。一旦shared_ptr的计数器变为0,它就会自动释放自己所管理的对象,并释放内存。

 
























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值