首页 / C++ / 《C++学习笔记》动态内存
《C++学习笔记》动态内存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了《C++学习笔记》动态内存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2067字,纯文字阅读大概需要3分钟。
内容图文
动态内存和智能指针
内存和智能指针简介
- 静态内存用于保存局部
static
对象、类中static
数据成员、定义在函数外的变量 - 栈内存用于保存函数内部的非
static
对象 - 堆(自由空间)用于存储动态分配的对象,要求显式销毁不用的对象
- 头文件
memory
中提供shared_ptr
智能指针以允许多个指针指向同一个对象,提供unique_ptr
智能指针以独占所指对象,智能指针也是模板 - 头文件
memory
中还提供伴随类weak_ptr
,指向shared_ptr
所管理的对象
程序使用动态内存的3种情况
- 不知道要使用多少对象
- 不知道所需对象的准确类型
- 多个对象之间需要共享数据
使用new
和delete
- 使用
new
动态分配和初始化对象,并返回指向该对象的指针,初始化可以采用默认初始化(未定义)、值初始化、列表初始化、括号初始化 new
可以分配const
对象,同时也要求对const
对象必须初始化- 内存耗尽
new
会抛出bad_alloc
异常,可在new
后加(nothrow)
取消抛异常而改为返回空指针,bad_alloc
和nothrow
均在头文件new
中 auto
只能推断括号中带有单参数时的类型- 使用
delete
来销毁对象(必须由new
创建)并释放内存(只可释放一次)
new
和delete
并不被推荐的原因
- 忘记
delete
,不耗尽内存不容易发现该问题 - 使用已经释放掉的对象
- 当两个指针指向同一个对象,容易发生释放两次内存的出错误
两智能指针通用操作
shared_ptr<type> sp
和unique_ptr<type> up
,分别定义了空智能指针p.get()
,返回p
中保存的指针swap(p,q)
和p.swap(q)
,交换两智能指针
shared_ptr
独有的操作
make_shared<type>(args)
,返回shared_ptr
智能指针,指向由args
初始化(类型对应的构造函数)的对象shared_ptr<type>p(q)
,拷贝智能指针q
到p
上,同时q
中的计数器+1,要求q
的指针类型可以转化为p*
- 任何拷贝都会导致计数器+1,如拷贝初始化、函数传参、函数返回
- 指针获得新值或者被销毁,计数器就会递减,一旦为0,就会自动释放(调用析构函数)
shared_ptr<type>p(q,d)
,拷贝智能指针q
到p
上,并用d
来代替delete
shared_ptr<type>p(u)
,p
从unique_ptr
智能指针处接管对象的所有权,并将u
置空shared_ptr<type>p(q,d)
,p
接管内置指针q
所指的对象,并使用可调用对象来代替delete
p = q
,该操作导致原来p
的计数器递减,q
的计数器递增p.use_count()
,返回与p共享对象的智能指针数量p.unique()
,若p.use_count()
为1,则为true
,否则为false
shared_ptr
可以接收new
返回的指针作为初始化参数,但因为该版本的构造函数是explicit
的,所以必须使用直接初始化形式p.reset()
、p.reset(q)
和p.reset(q.d)
,释放对象、令p
指向q
、调用d
而不是调用delete
释放q
动态数组
内容总结
以上是互联网集市为您收集整理的《C++学习笔记》动态内存全部内容,希望文章能够帮你解决《C++学习笔记》动态内存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。