C++中的指针和内存管理
目录
- 指针的声明
- new的使用
- 分配单个对象
- 分配数组
- delete的使用
- 释放单个对象
- 释放数组
- malloc和free
- 功能比较
- 区别
1. 指针的声明
C++中指针的声明方式:
int* p; //声明int类型指针p
2. new的使用
2.1 分配单个对象
新建对象并返回对象地址:
int* p = new int; //分配int空间
int* p = new int(10); //初始化值为10
struct Node
{
int code;
}
Node* p = new Node; //分配Node对象
需要匹配数据类型。
2.2 分配数组
int* p = new int[10]; //分配10个int的数组
//使用memset初始化数组
memset(p, 0, 10*sizeof(int));
new数组时不可以直接初始化数组元素。
3. delete的使用
3.1 释放单个对象
delete p; //释放对象
需要与new匹配使用。
3.2 释放数组
delete [] p; //释放数组,注意有方括号
4. malloc和free
4.1 功能比较
malloc/free与new/delete功能类似,都是用于动态内存分配。
4.2 区别
- new/delete会调用构造和析构函数,malloc/free不会
- new/delete是类型安全的,malloc/free只对内存操作
- new/delete适用于C++,malloc/free来源于C语言
所以C++中除了对象创建释放,其他情况下也可以直接使用malloc/free。