前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++关键字new和delete与C语言的malloc和free函数

C++关键字new和delete与C语言的malloc和free函数

作者头像
zy010101
发布2020-04-08 16:39:51
1.2K0
发布2020-04-08 16:39:51
举报
文章被收录于专栏:程序员

在C语言中想要在堆上申请内存空间可以使用malloc一族的函数。而释放申请的空间需要使用free函数。

C++提供了新的关键字new和delete来完成malloc和free所具备的功能。当然它们并不是完全一致。最主要的区别是C语言提供的函数在为对象申请空间的时候,不会触发构造函数;同时free在释放空间的时候不会触发析构函数。而new和delete则可以触发构造函数和析构函数。

代码语言:javascript
复制
#include<iostream>
/*在C++中使用new 和 delete来分配和释放空间*/
/*在C语言中使用malloc和free来分配和释放空间*/

using namespace std;
class A
{
public:
	A();
	~A();

private:

};

A::A()
{
}

A::~A()
{
}


int main()
{
	int *p(NULL);
	p = new int(333);			//使用new来申请内存空间;并把这块空间初始化为333;
	cout << *p << endl;
	delete p;					//使用delete来释放内存空间;注意:delete在释放某些对象时后面有[];
	int a[10];
	int(*p1)[10] = &a;			//说明这是一个指针数组
	cout << a << endl;
	cout << &a+1 << endl;
	char *str = new char[30];	//new一个30大小的char数组。
	delete[] str;				//释放数组的时候需要加上[]。

	A * myclass = new A;
	delete myclass;

	A* myclass1 = (A*)malloc(sizeof(A));
	free(myclass1);

	return 0;
}

调试这段代码就可以知道,new,delete,malloc,free得不同之处了。

除了应用在对象的时候,new,delete和malloc,free表现得不一致之外。其余时候没有什么区别。但是并不建议混用它们。例如:使用malloc来申请内存,而使用delete来释放内存。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档