1. 牢记,用 new 运算符动态分配的内存空间,一定要用 delete 运算符释放。否则,即便程序运行结束,这部分内存空间仍然不会被操作系统收回,从而成为被白白浪费掉的内存垃圾。这种现象也称为“内存泄露”。<br /> 如果一个程序不停地进行动态内存分配而总是没有释放,那么可用内存就会被该程序大量消耗,即便该程序结束也不能恢复。这就会导致操作系统运行速度变慢,甚至无法再启动新的程序。但是,只要重新启动计算机,这种情况就会消失。<br /> 编程时如果进行了动态内存分配,那么一定要确保其后的每一条执行路径都能释放它。<br /> 另外还要注意,释放一个指针,并不会使该指针的值变为 NULL

[1.x] new


- new的本质是运算符
- 如果自由存储区已被用完,可能无法成功分配内存,new可能会返回NULL
- 与malloc()相比,new的优点是它除了分配了内存,还创建了对象
1. **T *ptr = new T**
- 其中T为 Type Name
- 效果是动态分配一块大小为**sizeof(T)**的内存,并获得其地址
2. **T *ptr = new T[N]**
- 其中T为 Type Name
- 其中N为 任意正值表达式(这意味着N中可以存在变量、函数、运算符等)
- 效果是动态获得**N**块大小为**sizeof(T)**的内存,并获得该数组的首地址
- 如果要求分配的空间太大,操作系统找不到足够的内存来满足,那么动态内存分配就会失败,此时程序会拋出异常

[2.x] delete


- delete的本质是运算符
- delete的操作指针必须指向动态分配的内存空间
1. **delete ptr**
- 其中ptr指向一个动态分配的内存空间
- 效果是释放该动态分配的内存
2. **delete[] ptr**
- 其中ptr指向一个动态分配的数组的内存空间的首地址(否则会抛出异常)
- 效果是释放该动态分配的数组的内存