1、對於內部數據類型而言,兩者沒有區別;
2、對於非內部數據類型的對象而言,malloc,free無法滿足動態的對象的要求。對象在創建的時候自動調用構造函數銷燬時自動調用析構函 數.
3、由於malloc/free是庫函數,所以編譯器不能把執行構造函數和析構 函數的任務強加於malloc/free。new/delete是運算符 。
//malloc,free和new,delete的區別
#include<iostream>
using namespace std;
class Test
{
public:
Test()
{
cout<<"Test()"<<endl;
}
~Test()
{
cout<<"~Test()"<<endl;
}
};
//void Funtest()
//{
// Test *a=new Test;//調用Test
// delete a;//調用~Test
//}
void Funtest1()
{
Test* a=(Test*)malloc(sizeof(Test));
free(a);
}
int main()
{
Funtest1();
system("pause");
return 0;
}
4、new/delete已經覆蓋了malloc/free的內容,爲什麼不淘汰malloc? 答:因爲在C++中要調用C 程序,但是C程序中只能用malloc/free動態管理內存。