内存分为三种:静态内存、栈内存、堆内存。
静态内存
保存的对象:
- 局部static对象
void func()
{
static int a; //局部static对象
}
- 类static数据成员
class Function(){
public:
static void func(); //类中static函数
private:
static int i_func; //类中static变量
};
- 全局变量
生命周期:
从被定义开始,一直存在于程序的整个生命周期中。
栈内存
保存的对象:
- 定义在函数内的非static对象
void func()
{
int i_func; //定义在函数内的非static对象
}
生命周期:
仅在其定义的程序块运行时才存在。
堆(动态内存)
保存的对象:
- 动态分配的对象(程序运行时分配的对象)
生命周期:
由我们手动分配和摧毁
使用动态内存的原因:
- 程序不知道自己需要使用多少对象
- 程序不知道所需对象的准确类型
- 程序需要在多个对象间共享数据
动态内存分配方式:
- 运算符:new
- 语法:
Type *pointer = new Type;
- 返回:分配失败则返回空指针
动态内存摧毁方式:
- 运算符:delete
- 语法:
delete pointer;
初始化动态分配对象:
int *pi = new int(10); //动态分配一个int对象,初始值为10
string *ps = new string(2, '9'); //动态分配一个string对象,初始值为"99"
int *pa = new int[10](); //动态分配一个int数组,大小为10,初始值为0