#include "iostream"using namespace std;int main(){ //1.基礎(chǔ)的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); free(p); int *p2 = new int; delete p2; //分配數(shù)組 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; delete[] p3; system("pause"); return 0;}這里面只需要注意一點就是基礎(chǔ)類型和數(shù)組類型的刪除區(qū)別就OK。深入
1.區(qū)別#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是構(gòu)造函數(shù)" << endl; } ~MyClass() { cout << "我是析構(gòu)函數(shù)" << endl; }PRivate:};int main(){ //1.基礎(chǔ)的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配數(shù)組 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; //delete[] p3; free(p3); //我們在這里發(fā)現(xiàn)如果我用malloc和用new創(chuàng)建的基礎(chǔ)對象在使用方面沒什么區(qū)別 //free和delete也可以相互的刪除new和malloc的內(nèi)存 //區(qū)別在對象的時候不一樣 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); system("pause"); return 0;}我們發(fā)現(xiàn)沒有執(zhí)行構(gòu)造函數(shù)。#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是構(gòu)造函數(shù)" << endl; } ~MyClass() { cout << "我是析構(gòu)函數(shù)" << endl; }private:};int main(){ //1.基礎(chǔ)的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配數(shù)組 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; //delete[] p3; free(p3); //我們在這里發(fā)現(xiàn)如果我用malloc和用new創(chuàng)建的基礎(chǔ)對象在使用方面沒什么區(qū)別 //free和delete也可以相互的刪除new和malloc的內(nèi)存 //區(qū)別在對象的時候不一樣 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); MyClass *my1 = new MyClass(); system("pause"); return 0;}new的話可以執(zhí)行構(gòu)造函數(shù)#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是構(gòu)造函數(shù)" << endl; } ~MyClass() { cout << "我是析構(gòu)函數(shù)" << endl; }private:};int main(){ //1.基礎(chǔ)的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配數(shù)組 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; //delete[] p3; free(p3); //我們在這里發(fā)現(xiàn)如果我用malloc和用new創(chuàng)建的基礎(chǔ)對象在使用方面沒什么區(qū)別 //free和delete也可以相互的刪除new和malloc的內(nèi)存 //區(qū)別在對象的時候不一樣 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); free(my); MyClass *my1 = new MyClass(); delete(my1); system("pause"); return 0;}總結(jié)
從以上的代碼中我們可以看出,malloc和free是不執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的,但是new和delete他們組成是要自動調(diào)用構(gòu)造函數(shù)還有析構(gòu)函數(shù)的。如果是基礎(chǔ)的類型的話這兩者基本上沒有區(qū)別。
新聞熱點
疑難解答