C++学习笔记【第二部分第十二章:动态内存】
2017-09-15 15:23
363 查看
动态内存
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. 静态内存保存局部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,来执行对象的析构函数
相关文章推荐
- C++学习笔记【第二部分第十二章:动态内存】
- C++动态内存创建与内存管理学习笔记【转】
- c++ primer(第五版)学习笔记及习题答案代码版(第十二章)动态内存与智能指针
- 【C++学习笔记】vector内元素含有动态内存问题
- C++学习笔记【第二部分第十一章:关联容器】
- C++ 学习笔记(12)动态内存、智能指针、new和delete、动态数组、allocator
- C++动态内存创建与内存管理学习笔记
- 菜鸟潇寒学习C++笔记------第二部分
- C++学习笔记【第二部分第八章:IO类】
- C/C++学习笔记13:传递动态内存(1)
- C++学习笔记【第二部分第十章:泛型算法】
- 转:C++动态内存创建与内存管理学习笔记[2]
- 转:C++动态内存创建与内存管理学习笔记[1]
- C++动态内存创建与内存管理学习笔记[1]
- 转: C++动态内存创建与内存管理学习笔记[3]
- C++基础学习笔记----第五课(动态内存分配、命名空间、强制类型转换)
- C++学习笔记【第二部分第九章:顺序容器】
- C++动态内存创建与内存管理学习笔记[2]
- C++动态内存创建与内存管理学习笔记[3]
- C++动态内存创建与内存管理学习笔记[4]