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