Skip to content

Latest commit

 

History

History
18 lines (18 loc) · 1.75 KB

chapter12.md

File metadata and controls

18 lines (18 loc) · 1.75 KB

第12章 动态内存

  • 静态内存用来保存局部static对象、类static数据成员以及定义在任何函数植物的变量。
  • 栈内存用来保存定义在函数内的非static对象。
  • 分配在静态内存或栈内存的对象由编译器字段创建和销毁。
    • 对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,在程序结束时销毁。
  • 除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称作自由空间(free store)堆(heap)
    • 程序用堆来存储动态分配(dynamically allocate)的对象--即,那些在程序运行时分配的对象。
    • 动态对象的生存期由程序来控制,也就是说,当动态对象不再使用时,我们的代码必须显式地销毁它们。
  • 在C++中,动态内存的管理是通过一对运算符来完成的:
    • new 在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象进行初始化;
    • delete 接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。
  • 为了更容易(同时也更安全)地使用动态内存,新的标准库提供了两种智能指针(smart pointer)类型来管理动态对象。
    • 智能指针的行为类似常规指针,重要的区别是它负责自动释放所指的对象。
    • 新标准库提供的这两种智能指针的区别在于管理底层指针的方式:
      • shared_ptr 允许多个指针指向同一个对象
      • unique_ptr 则“独占”所指向的对象。
    • 标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。
    • 这三种类型都定义在memory头文件中。