Cxx primer-chap12-Dynamic Memory

  1. 目前我们使用的对象都是语言本身代替我们管理其生命周期和作用域,例如global object、局部的自动变量和局部的static变量,除此之外,语言也允许我们创建动态分配的对象(即运行时创建的对象):在这里插入图片描述
  2. 不同类型的对象,其所在内存区域也有差别。目前为止有三种内存区域: static内存、stack内存和heap内存:在这里插入图片描述
  3. C++中的动态内存管理通过两个操作符进行:newdelete在这里插入图片描述
  4. 新标准通过头文件memory定义了三个智能指针:shared_ptr, unique_ptrweak_ptr,它们和普通指针的使用方式差不多,唯一的例外就是它们能够自动管理动态内存在这里插入图片描述
  5. 创建shared_ptr指向的对象的安全方式:在这里插入图片描述
  6. 计数指针的拷贝和赋值,优雅之处在于reference count在这里插入图片描述
  7. 所以计数指针是如何管理其动态分配的对象呢->destructor在这里插入图片描述
  8. 因为计数指针保证只要有一个计数指针存在,其指向的对象就不会被释放。所以对于不再使用的计数指针,需要及时删除掉以避免浪费内存:在这里插入图片描述
  9. 使用动态内存的三种情况:在这里插入图片描述
  10. 多个对象共享潜在数据的场景很多吗?是不是有点像多个指针指向一个对象:在这里插入图片描述
  11. 对于手动管理动态内存的class需要自己重写copyassigndestructor函数:在这里插入图片描述
  12. delete表达式遇到非动态内存的指针也是要命:在这里插入图片描述
  13. 使用原生指针管理动态内存的一些问题(忘记释放造成内存泄漏、多个指针指向同一个对象,只管理其中一个指针造成其他指针是悬挂指针、以及多次释放同一个动态内存对象):在这里插入图片描述
  14. 计数指针的初始化方式多样,例如可以使用new 进行,但要注意形式:在这里插入图片描述
  15. 智能指针不限于管理动态内存,也可以管理其他“资源”,对其进行善后处理:在这里插入图片描述,例如关闭打开的连接:在这里插入图片描述
  16. 原生指针和智能指针不能混用,否则计数器会失效:在这里插入图片描述,具体而言:在这里插入图片描述
  17. 类似于assign作用的reset成员:在这里插入图片描述
  18. 水能载舟,亦能覆舟:在这里插入图片描述
  19. 独占指针:在这里插入图片描述,其不支持copy和assign:在这里插入图片描述
  20. 独占指针特有的release()成员:在这里插入图片描述
  21. 独占指针允许在指针将要被释放时进行拷贝/赋值:在这里插入图片描述
  22. weak_ptr好弱,没有话语权:在这里插入图片描述
  23. 因为weak_ptr指向的对象随时会被销毁,所以需要谨慎的访问其所指向的对象:在这里插入图片描述
  24. 动态分配数组的两种方式:new int []allocator,对于涉及动态分配数组的类而言,需要我们手动定义copyassigndestructor在这里插入图片描述
  25. 注意动态分配的数组返回的是指向数组中第一个元素类型的指针在这里插入图片描述
  26. new type[size]相对应的 delete [] pointer在这里插入图片描述
  27. 智能指针和动态数组搭配:在这里插入图片描述
  28. 使用allocator内存分配对象初始化分开:在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ocodotial

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值