白话C++系列(5)-- 内存管理
2016-04-09 21:38 Keiven_LY 阅读(831) 评论(0) 编辑 收藏 举报C++内存管理
什么是内存管理?
思考:内存的本质是什么?---->资源
思考:谁掌管内存资源? ---->操作系统
思考:我们能做什么? ---->申请/归还
申请/归还内存资源就是内存管理
C++中如何进行内存的申请和释放?
申请 --->使用运算符new
释放 --->使用运算符delete
即:
申请内存:int *p = new int;
释放内存: delete p;
这样就申请和释放一个内存或是某一种类型的内存
思考:如何申请和释放块内存呢?
int *arr = new int[10]; //申请了10个整型的块内存
delete []arr; //释放块内存
思考:申请内存是否一定就能申请成功呢?显然,不一定!!
因此,编码时,就要对可能的申请内存失败进行处理
int *p = new int[1000];
if(NULL == p)
{
//内存分配失败
}
释放内存后,要将相应的指针赋值为空,即
delete p; delete []p;
p = NULL; p = NULL;
如果将释放后的指针不置为空,那么当前的这个指针还是指向相应的那块内存,如果我们不小心又调用了一次delete,那么就会使得同一块内存被重复回收,一旦被重复回收,计算机就会出现异常。
小结:
1) 使用new申请内存,使用delete释放内存
2) 申请内存时需要判断是否申请成功,释放内存后需要将指针置为空
3) new和delete要配套使用
最后看一个实例:
在堆中申请100个char类型的内存,拷贝Hello imooc字符串到分配的堆中的内存中,打印字符串,最后释放内存。
完整可执行程序:
#include <string.h> #include <iostream> using namespace std; int main(void) { char *str = new char[100];//在堆中申请100个char类型的内存 strcpy(str, "Hello imooc"); //拷贝Hello C++字符串到分配的堆中的内存中 cout<<str<<endl;//打印字符串 delete []str;//释放内存 str=NULL; return 0; }