new
1. 概念
在C++中用来向系统申请堆区的内容空间,new等价于C语言中的malloc。
2. new的使用:
1)申请单个内存
#include <iostream>
#include <string>
using namespace std;
int main()
{
//指针 = new 类型名 申请单个内存
int* p = new int;
*p = 10;
cout << *p << endl;
return 0;
}
2)申请单个内存初始化
#include <iostream>
#include <string>
using namespace std;
int main()
{
//通过后面加(数值) 完成初始化
int* p2 = new int(20);
cout << *p2 << endl;
return 0;
}
3)申请多个连续的空间
#include <iostream>
#include <string>
using namespace std;
int main()
{
//申请多个连续空间
int* p3 = new int[10];
memset(p3, 0, 40);// 指针名,数值0,sizeof大小
for (int i = 0; i < 10; ++i)
{
cout << p3[i] << endl;
}
return 0;
}
3. new的特性
- new是运算符
2)new可以分配两种内存:
一种是单个内存,一种是连续的内存
- new只有分配单个内存的时候可以同时给该内存赋值,分配连续多个内存是无法同时赋值的。可参考用for循环赋值。
#include <iostream>
#include <string>
using namespace std;
int main()
{
//申请多个连续空间
int* p3 = new int[10];
memset(p3, 0, 40);
for (int i = 0; i < 10; ++i)
{
p3[i] = i + 1;
}
for (int i = 0; i < 10; ++i)
{
cout << p3[i] << endl;
}
return 0;
}
4)如果要给连续的内存同时赋值用memset赋值,赋值为0
memset(指针,数值0,sizeof大小)
delete
1. 概念:
在C++中用来清理向系统申请堆区的内容空间,delete等价于C语言中的free。
2.delete的使用
delete p;
p=nullptr;
1)释放单个内存
#include <iostream>
#include <string>
using namespace std;
int main()
{
//申请单个内存 及删除
int* p = new int(10);
delete p;
p = nullptr;
return 0;
}
2)释放连续内存
#include <iostream>
#include <string>
using namespace std;
int main()
{
//申请多个连续内存 及 删除
int* p3 = new int[10];
delete[] p3;
return 0;
}
3. 特性:
1delete是运算符(free是函数)
2、delete可以释放两种内存,一种是单个内存,一种是连续内存。
3、delete释放内存时,指针的必须是指向内存首地址。
4、释放完内存之后要记得给指针赋值NULL操作,不要产生野指针。