new运算符
- 功能:在堆区分配空间并返回地址
- 注意:由于new返回的是空间的地址,所以定义成指针类型
char *p = new char; // 没有初始值
int *p = new int(10); // 赋值
或者
int *p = new int;
*p = 10; // 离谱!
double *p = new double[100]; //申请数组,不能赋初值,括号里不能为空!
// 给数组赋值,通过for,或者strcpy,绝对绝对不能直接等
用new的跟不用的 不一样:
- 判断内存分配成功与否
if(!p) {
cout<<"失败!"<<endl;
return 1; // 终止程序,并返回错误代码
或者
exit();
}
什么时候需要new?
- 需要很大的空间(栈区很小)
- (题目)连接两个字符串
delete运算符
delete p; // 单个
delete []p; // 数组
- 释放内存要设立空指针
delete []p;
p = NULL;
什么时候需要delete释放?
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。