您的位置:首页 > 编程语言 > C语言/C++

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,来执行对象的析构函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: