C++中new和malloc的区别

C++中new和malloc的区别

  1. 在C语言中我们经常用malloc去创建一个堆区空间,malloc创建的空间用完以后需要用free去释放这段空间!
  2. 在C++语言中,C++无条件兼容C语言,C++可以用malloc去创建一个空间,但是C++也有自己的关键词,我们用的是new去创建空间,然后用delete去释放这段空间
  3. 下面具体分析一下C++语言中malloc和new有何不同,free和delete有何不同之处
#include <iostream>
using namespace std;
class Test {
public:
	Test() {//创建一个无参构造函数
		cout << "调用无参构造函数" << endl;
		m_a = 0;
		m_b = 0;
	}
	Test(int x, int y) {//创建一个两个参数的构造函数
		cout << "调用了两个参数的构造函数" << endl;//测试调用的是哪个构造函数
		m_a = x;
		m_b = y;
	}
	void prinT() {
		cout << m_a << ",,," << m_b << endl;
	}
	~Test() {
		cout << "调用析构函数" << endl;
	}
private:
	int m_a;
	int m_b;
};
int main() {
	//Test *p = (Test*)malloc(sizeof(Test));
	//p->prinT();//malloc创建空间时无法进行初始化,打印出来的为随机数
	Test *p = new Test;//调用无参构造函数
	Test *tp = new Test(10, 20);//调用有参构造函数
	p->prinT();
	tp->prinT();
	if (p!=NULL) {
/*delete*/free(p);//用free释放new创建的空间,可以测试到free在释放空间是不会触发析构函数
		p = NULL;
	}
	if (tp != NULL) {
		delete tp;//用delete释放new创建的空间直接触发析构函数
		tp = NULL;
	}
	return 0;
}

输出结果:
C++中new和malloc的区别把33行free释放空间换成delete会发现调用了两次析构函数结果如下

输出结果:

C++中new和malloc的区别