内存是程序运行必不可少的资源, 由操作系统分配和管理. 作为程序员, 我们通常做的只能是申请和归还. 本文主要介绍 C++ 内存的申请和释放 (归还), 以及注意事项.
1 申请和释放内存的运算符
申请 new
释放 delete
2 方法
申请内存:
- int *p = new int;
- // 定义一个指针, 来接收 new 申请到的地址
释放内存:
delete p;
块内存的申请和释放:
- // 申请
- int *arr = new int[10];
- // 释放
- delete []arr;
3 注意事项
3.1 配套使用
我们知道在 c 语言中内存的申请和释放是 malloc 和 free 完成:
- // 申请
- void *malloc(size_t size);
- // 释放
- void free(void *memblock);
但是在 C++ 中使用的是 new 和 delete; 如果使用 C 语言的方式申请, 就得用 C 语言的方式释放; 使用 C++ 的方式申请, 就得用 C++ 的方式释放; 配套使用. 否则无法通过编译.
3.2 内存可能申请失败, 需要有异常处理
- int *p = new int[1000];
- if (NULL == p)
- {
- // 内存分配失败
- }
3.3 释放内存需要将指针置为空
- int *p = new int[1000];
- if (NULL == p)
- {
- // 内存分配失败
- // 异常处理
- }
- delete []p; // 释放
- p = NULL;
除了释放内存, 还得将指针置为空; 否则指针还指向之前的内存, 如果不小心再执行了 delete []p; 操作, 就会导致同一块内存被重复回收两次, 将引发严重错误.
- 4 Demo
- #include <string.h>
- #include <iostream>
- using namespace std;
- int main(void)
- {
- // 在堆中申请 100 个 char 类型的内存
- char *str = new char[100];
- // 拷贝 Hello C++ 字符串到分配的堆中的内存中
- strcpy(str, "Hello C++");
- // 打印字符串
- cout << str << endl;
- // 释放内存
- delete []str;
- str = NULL;
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3399372.html