动态内存分配
其实在学 C 语言的时候, 我们就已经用 malloc 函数去实现了, 当然在 C++ 里也有新的方法.
今天学习的是在 C++ 环境下的动态内存的分配.
用 new 运算符实现动态内存分配
有这么两种用法:
1. 分配一个变量
exp.
P=new T;
其中 T: 任意类型名
P: 类型为 T * 的指针
动态分配出一片大小为 sizeof(T) 字节的内存空间, 并且将该内存空间的起始地址赋值给 P.
exp.
- int *pn;
- pn=new int;
- *pn=5;
2. 分配一个数组
exp.
P=new T[N];
其中 T: 任意类型名
P: 类型为 T * 的指针
N: 要分配的数组元素的个数, 可以是整型的表达式
动态分配出一片大小为 sizeof(T) * N 字节的内存空间, 并且将该内存空间的起始地址赋值给 P.
exp.
- int *pn;
- int i=5;
- pn=new int[i*20];
- pn[0]=20;
- pn[100]=30;// 编译没有问题, 运行时导致数组出界
用 delete 运算符释放动态分配的内存
delete 指针: 该指针必须指向 new 出来的空间
注意点首先:
1. 用 new 动态分配的内存空间, 一定要用 delete 运算符进行释放
exp.
- int *p=new int;
- *p=5;
- delete p;
- delete p;// 导致异常, 一个空间不能被 delete 多次
2. 用 "delete" 释放动态分配的数组, 要加 []
exp.
- int *p=new int[20];
- p[0]=1;
- delete []p;
当初学 C 的时候就对动态内存分配这块的知识非常的不了解, 希望在 C++ 的学习中能对此有更深一层的认识与更熟练的应用.
来源: http://www.bubuko.com/infodetail-3399140.html