C++中的new 和delete 是操做符,new 分配對象時候會自動調用構造函數,delete對象時候,會自動調用析構函數,而C語言中 malloc() 和 free() 是函數。 理論上malloc free 和 new 、delete 能夠混搭用,可是最好不要這樣用,也不能保證程序正確運行。ios
C++中new 和delete的語法格式以下:程序員
#include "stdlib.h" #include "stdio.h" #include "string.h" #include <iostream> using namespace std; //new 和delete是操做符 //malloc() 和free() 是函數 //new 在堆上分配基礎類型、分配數組類型、分配對象 int main01() { //new基礎類型 int* p = (int*)malloc(sizeof(int)); free(p); int* p2 = new int; *p2 = 101; printf("*p2:%d \n", *p2); delete p2; //開闢一個存放整數的空間,並指定該整數的初值爲100 int* p3 = new int(100); system("pause"); return 0; } class Test { public: Test(int mya, int myb) { cout << "構造函數,我被調用了" <<endl; a = mya; b = myb; } ~Test() { cout << "析構函數,我被調用了" << endl; } int getA(){ return a; } protected: private: int a; int b; }; int main() { //new數組 int* p1 = (int*)malloc(10*sizeof(int)); //int a[10] p1[0] = 1 ; free(p1); int* p2 = new int[10]; p2[0] = 1; p2[1] = 2; delete [] p2; //new對象 new操做符也會自動的調用這個類的構造函數 //delete自動的調用這個類的析構函數,說明程序員能夠 //手動控制類對象的生命週期 Test* p3 = new Test(1,2); cout << p3->getA() << endl; delete p3; system("pause"); return 0; }