C++中new和malloc的区别
- 在C语言中我们经常用malloc去创建一个堆区空间,malloc创建的空间用完以后需要用free去释放这段空间!
- 在C++语言中,C++无条件兼容C语言,C++可以用malloc去创建一个空间,但是C++也有自己的关键词,我们用的是new去创建空间,然后用delete去释放这段空间
- 下面具体分析一下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;
}
输出结果:
把33行free释放空间换成delete会发现调用了两次析构函数结果如下
输出结果: