#include<iostream> #include<string> using namespace std; void Test_1() { int *p = (int *)malloc(sizeof(int)); *p = 10; if (NULL == p) exit(1); free(p); int *q = new int(10); delete q; int *q_2 = new int[10]; delete[] q_2; } /* 为什么说 new delete(c++)比 malloc free(c) 更加的强悍 1.new 与 malloc 的比较 (1)malloc开辟空间时需要进行空间大小的计算,new不需要 (2)malloc空间开辟成功后需要强制转换,new不需要 (3)malloc空间开辟后需要对是否成功开辟进行检测,new不需要 (4)malloc只是对空间的开辟,不进行初始化,new可以在空间开辟时进行初始化 (5) malloc开辟空间时只是开辟相应空间的大小,没有单个元素与数组的区别 对于 new 而言开辟数组空间时,必须用 new[],释放数组空间时必须用 delete[] */ class Date { public: Date(int x = 0) :date(x) { p = (char*)malloc(sizeof(char)* 10); cout << "This is Date()" << endl; } ~Date() { free(p); cout << "This is ~Date()" << endl; } public: int date; char *p; }; void Test_2() { Date *d1 = (Date*)malloc(sizeof(Date)); d1->date = 10; free(d1); Date *d2 = new Date(10); delete d2; } void main() { Test_2(); } /* 2.最主要的区别 对于对象而言 malloc 只管开辟相应类空间的大小 free 只是释放相应空间 new 在开辟相应类空间大小的同时会调用该类的构造函数 delete 在释放相应类空间的同时会调用该类的析构函数
*/