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

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

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

#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来释放内存。

 

发布了222 篇原创文章 · 获赞 174 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/zy010101/article/details/105230696