一、对象的动态创建和释放引申思考
malloc 和 free 是 C 语言 stdlib 标准库中的函数 , 用于 分配 和 回收 堆内存 ;
new 和 delete 是 C 语言中的 操作符 , 用于 分配 和 回收 堆内存 ;
在 C 语言中 , 兼容 C 语言 的 malloc 和 free 用法 , 但是推荐使用 new 和 delete 进行动态内存管理 ;
一般情况下 :
- 使用 malloc 分配的内存 , 需要使用 free 进行释放 ;
- 使用 new 分配的内存 , 需要使用 delete 进行释放 ;
那么 使用 malloc 申请的内存 , 是否能使用 delete 进行释放 ,
使用 new 申请的内存 , 是否能使用 free 进行释放 ,
下面分为不同类型的数据申请内存的几种情况进行讨论 :
- 为基础数据类型分配内存
- 为数组数据类型数据分配内存
- 为类对象分配内存
二、基础数据类型 内存分析
1、malloc 分配内存 delete 释放内存
使用 malloc 函数 为 基础类型 分配的内存 , 可以使用 delete 进行释放 ;
在下面的代码中 ,
使用 malloc 函数 在 堆内存中 , 申请一个 int 类型的内存空间 ,
代码语言:javascript复制int* p = (int*)malloc(sizeof(int));
然后使用 delete 释放内存空间 , 该程序正常执行 , 没有报错 , 说明对于 使用 malloc 函数 为 基础类型 申请的 堆内存空间 , 使用 delete 操作符 可以完成 free 函数的职能 , 成功释放内存空间 ;
代码语言:javascript复制// malloc 申请的内存 使用 delete 释放
delete(p);
代码示例 :
代码语言:javascript复制#include "iostream"
using namespace std;
int main()
{
// C 语言中动态申请内存
int* p = (int*)malloc(sizeof(int));
*p = 10;
cout << "*p = " << *p << endl;
// malloc 申请的内存 使用 delete 释放
delete(p);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
代码语言:javascript复制*p = 10
Press any key to continue . . .
2、new 分配内存 free 释放内存
使用 new 操作符 为 基础类型 分配的内存 , 可以使用 free 进行释放 ;
在下面的代码中 ,
使用 malloc 函数 在 堆内存中 , 申请一个 int 类型的内存空间 ,
代码语言:javascript复制int* p = (int*)malloc(sizeof(int));
然后使用 delete 释放内存空间 , 该程序正常执行 , 没有报错 , 说明对于 使用 malloc 函数 为 基础类型 申请的 堆内存空间 , 使用 delete 操作符 可以完成 free 函数的职能 , 成功释放内存空间 ;
代码语言:javascript复制// malloc 申请的内存 使用 delete 释放
delete(p);
代码示例 :
代码语言:javascript复制#include "iostream"
using namespace std;
int main()
{
// 使用 new 为基础类型在堆内存中申请内存空间
int* p = new int;
*p = 10;
cout << "*p = " << *p << endl;
// new 申请的内存 使用 free 释放
free(p);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
代码语言:javascript复制*p = 10
Press any key to continue . . .