首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C++】动态内存管理 ④ ( 对象的动态创建和释放引申思考 | 基础数据类型 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )

【C++】动态内存管理 ④ ( 对象的动态创建和释放引申思考 | 基础数据类型 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )

作者头像
韩曙亮
发布2023-10-15 17:14:56
发布2023-10-15 17:14:56
1.6K0
举报

一、对象的动态创建和释放引申思考

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 . . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、对象的动态创建和释放引申思考
  • 二、基础数据类型 内存分析
    • 1、malloc 分配内存 delete 释放内存
    • 2、new 分配内存 free 释放内存
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档