【C++】动态内存管理 ④ ( 对象的动态创建和释放引申思考 | 基础数据类型 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 ) 拼搏现实的明天。 2023-10-16 12:01 3阅读 0赞 #### 文章目录 #### * 一、对象的动态创建和释放引申思考 * 二、基础数据类型 内存分析 * * 1、malloc 分配内存 delete 释放内存 * 2、new 分配内存 free 释放内存 ## 一、对象的动态创建和释放引申思考 ## -------------------- 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 类型的内存空间 , int* p = (int*)malloc(sizeof(int)); 然后使用 delete 释放内存空间 , 该程序正常执行 , 没有报错 , 说明对于 使用 malloc 函数 为 基础类型 申请的 堆内存空间 , 使用 delete 操作符 可以完成 free 函数的职能 , 成功释放内存空间 ; // malloc 申请的内存 使用 delete 释放 delete(p); **代码示例 :** #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; } **执行结果 :** *p = 10 Press any key to continue . . . ![在这里插入图片描述][94eb357d2110414b88c02d5a02e03b56.png] ### 2、new 分配内存 free 释放内存 ### 使用 new 操作符 为 基础类型 分配的内存 , 可以使用 free 进行释放 ; 在下面的代码中 , 使用 malloc 函数 在 堆内存中 , 申请一个 int 类型的内存空间 , int* p = (int*)malloc(sizeof(int)); 然后使用 delete 释放内存空间 , 该程序正常执行 , 没有报错 , 说明对于 使用 malloc 函数 为 基础类型 申请的 堆内存空间 , 使用 delete 操作符 可以完成 free 函数的职能 , 成功释放内存空间 ; // malloc 申请的内存 使用 delete 释放 delete(p); **代码示例 :** #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; } **执行结果 :** *p = 10 Press any key to continue . . . ![在这里插入图片描述][78cbd21765d74ab89e02c8bab96f76f0.png] [94eb357d2110414b88c02d5a02e03b56.png]: https://img-blog.csdnimg.cn/94eb357d2110414b88c02d5a02e03b56.png [78cbd21765d74ab89e02c8bab96f76f0.png]: https://img-blog.csdnimg.cn/78cbd21765d74ab89e02c8bab96f76f0.png
还没有评论,来说两句吧...