C++ new 和 delete 詳細解析

C++中的new 和delete 是操做符,new 分配對象時候會自動調用構造函數,delete對象時候,會自動調用析構函數,而C語言中 malloc() 和 free() 是函數。 理論上malloc free 和 new 、delete 能夠混搭用,可是最好不要這樣用,也不能保證程序正確運行。ios

 

C++中new 和delete的語法格式以下:程序員

 

1

 

#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;
}
相關文章
相關標籤/搜索