#include "iostream"using namespace std;int main(){ //1.基礎的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); free(p); int *p2 = new int; delete p2; //分配數組 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;}這里面只需要注意一點就是基礎類型和數組類型的刪除區別就OK。深入
1.區別#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是構造函數" << endl; } ~MyClass() { cout << "我是析構函數" << endl; }PRivate:};int main(){ //1.基礎的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配數組 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); //我們在這里發現如果我用malloc和用new創建的基礎對象在使用方面沒什么區別 //free和delete也可以相互的刪除new和malloc的內存 //區別在對象的時候不一樣 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); system("pause"); return 0;}我們發現沒有執行構造函數。#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是構造函數" << endl; } ~MyClass() { cout << "我是析構函數" << endl; }private:};int main(){ //1.基礎的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配數組 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); //我們在這里發現如果我用malloc和用new創建的基礎對象在使用方面沒什么區別 //free和delete也可以相互的刪除new和malloc的內存 //區別在對象的時候不一樣 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); MyClass *my1 = new MyClass(); system("pause"); return 0;}new的話可以執行構造函數#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是構造函數" << endl; } ~MyClass() { cout << "我是析構函數" << endl; }private:};int main(){ //1.基礎的使用 //new 基本類型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配數組 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); //我們在這里發現如果我用malloc和用new創建的基礎對象在使用方面沒什么區別 //free和delete也可以相互的刪除new和malloc的內存 //區別在對象的時候不一樣 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); free(my); MyClass *my1 = new MyClass(); delete(my1); system("pause"); return 0;}總結
從以上的代碼中我們可以看出,malloc和free是不執行構造函數和析構函數的,但是new和delete他們組成是要自動調用構造函數還有析構函數的。如果是基礎的類型的話這兩者基本上沒有區別。
新聞熱點
疑難解答