系统为变量分配内存的方式决定了变量的作用域和生存期
C++有静态分配、自动分配、动态分配
静态分配:在编译时就分配了内存,程序结束时,变量释放
栈:在运行程序后,系统将为程序开辟一块成为栈的活动存储区,按照先进后出的方式使用存储空间
自动分配:在栈中为变量临时分配的内存空间,在程序运行后,在变量作用域开始时,由系统自动为变量分配内存,在作用域结束后释放内存
动态分配:利用“堆”的内存块为变量分配内存空间,堆使用静态存储区和栈之外的部分内存
动态分配完全由程序控制内存使用的分配方式
new运算符自动分配内存
delete运算符或程序结束时释放内存
new的使用方法
指针变量 = new 数据类型
#include <iostream>
using namespace std;
int main()
{
//给单个对象申请分配内存
int* p1;
p1 = new int;//p指向一个未初始化的int型对象
//给单个对象申请分配内存的同时初始化该对象
int* p2;
p2 = new int(666);//p指向一个666的int型对象
//同时给多个对象申请分配内存(数组)
int *p3;
p3 = new int [5];
p3[0] = 10;
p3[1] = 11;
p3[2] = 12;
p3[3] = 13;
p3[4] = 14;
cout<<p3[1]<<endl;
return 0;
}
注意:
new不一定能申请内存成功,失败返回NULL
释放内存空间
delete 指针变量;
如果要释放数组里的
就这样
delete [ ] 指针变量;//注意,方括号内不用写下标
如果想要删除该下标的内存,可以复制该指针但到了想删除的那一个可以跳过,然后吧旧的指针删除,保留新的指针