C++学习笔记【第二部分第十二章:动态内存】

动态内存
  1. 静态内存保存局部static对象,类static数据成员,以及定义在任何函数之外的变量
  2. 栈内存用来保存定义在函数内的非static对象
  3. 分配在静态内存或者栈内存的对象由编译器自动你那个创建和销毁
  4. 程序使用堆来存储动态分配的对象
  5. 两种智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象
  6. shared_ptr允许多个指针指向同一个对象,unique_prt”独占“所指对象,定义在memory头文件
  7. 最安全的分配和使用动态内存的方法是调用make_shared
  8. 如果分配了动态内存,用完之后忘记释放内存,这样就会产生内存泄漏。如果在尚有指针引用内存的情况我们就释放了它,就会产生引用非法内存的指针。
  9. 智能指针使用规范:不使用相同的内置指针值初始化(或reset)多个智能指针;不delete get()返回的指针;不使用get()初始化或reset另一个智能指针;如果使用get()返回的指针,记住当最后一个对应的智能指针销毁后,返回的指针就无效了;如果使用智能指针管理的资源不是new分配的内存,记得传递给它一个删除器。
  10. unique_ptr,定义时,我们需要将其绑定到一个new返回的指针
  11. 类似shared_ptr,unique_ptr的初始化必须采用直接初始化形式
  12. unique_ptr不支持普通的拷贝或赋值。(例外,可以拷贝或赋值一个将要被销毁的unique_ptr,例如函数返回)
  13. unique_ptr对指针的所有权可以由release或reset来转移
  14. 创建一个weak_ptr 的时候,用shared_ptr来初始化
  15. weak_ptr不会改变shared_ptr所指对象的计数
  16. 由于对象有可能不存在,所以不能使用weak_ptr直接访问对象,而应该调用lock。P420
  17. weak_ptr不会影响所指对象的生存期
  18. 大多数应用应该使用标准库容器而不是动态分配的数组。使用容器更为简单,更不容器出现内存管理错误且可能有更好的性能
  19. 动态数组并不是数组类型,返回的是一个元素类型的指针,因此不能对动态数组调用begin或end,也不能用范围for语句来处理动态数组中的元素
  20. delete p // p必须指向一个动态分配的对象或为空
  21. delete [] pa //pa必须指向一个动态分配的数组或为空
  22. 标准库allocator类定义在头文件memory中,帮助我们将分配内存和对象构造分离开来
  23. allocator分配的内存是未构造的
  24. 为了使用allocator返回的内存,我们必须使用construct构造对象
  25. 当使用完对象后,必须对每个构造的元素调用destroy,来执行对象的析构函数

 

 

更多学习资料,请关注下面的公众号:不定期分享

  1. 深度学习网络总结
  2. 机器学习算法及其应用场景
  3. 算法与数据结构(leetcode 题解)
  4. cuda编程与并行优化
  5. 其他读书分享如:《战国策》,《智囊全集》
  6. 宇宙常识科普与星座辨别
  7. 等等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值