1. 动态内存分配是在程序运行时从堆分配,非静态的,局部变量内存分配是在栈上;
2. 动态内存分配的用处:
(1)分配可变大小的内存,编译器一般分配指定大小,当然动态数组编译器也可以;
(2)使程序员很弹性的分配(需要内存)和释放(不再需要)内存;
3. 标准的变量如int a, char c[10]等都是自动分配和释放的,一般动态分配指new申请的空间,并把地址给一个指针,如int *p=new int[10];
4. 如果动态申请的内存,在不用时没有释放,可能会造成内存泄露;
5. new操作
(1)申明:pointer-variable = new data-type;
int* p=NULL p=new int; //或者 int *p=new int;
(2)带初始化的操作
// pointer-variable = new data-type(value); float *p=new float(7.5)
(3)分配一内存块(数组):返回数组首地址给指针变量
// pointer-variable = new data-type[size]; int *p=new int[10]
6. 标准数组释放和new释放的区别
(1)标准数组的释放是编译器自动完成,如果是局部变量,可能在函数执行完或返回时释放;
(2)动态分配的数组内存一直保持,直到程序员手动释放或程序终止;
7. 如果内存空间不够分配,new申请可能会抛出一个异常,但使用new(nothrow)的写法会返回NULL,可以如下写法来检查指针变量:
int *p=new(nothrow) int; if(!p) { cout<<"mem alloc faied\n"; }
8. delete操作
// Release memory pointed by pointer-variable delete pointer-variable; delete p; delete[] q; //释放一块内存