在C++中申請堆區空間與在C中申請堆區空間的異同點

Trm100發表於2020-09-29

在C++中申請堆區空間與在C中申請堆區空間的異同點

在c++中,使用new申請空間,delete釋放空間。

c語言中,使用malloc申請空間,free釋放空間。

new delete使用例:

int *p = new int;
delete p;

malloc free使用例:

int *p = (int*)malloc(sizeof(int));
free(p);

1.malloc申請的空間時不能在同一語句內給申請的空間初始化,

而new就可以:

int *p = new int(22);

有:*p == 22 。

2.申請陣列和釋放陣列時形式不同

malloc free:

int *p = (int*)malloc(sizeof(int)*5);

while(1)
{
    static int i = 0;
    free(p[i]);
    if(4 == i )
    {
        break;
    }
    i++;
}

需要運用到迴圈來進行釋放。

 

new delete:

int *p = new int[5];

delete[] p;

(注:申請陣列時無法像申請單個變數時進行初始化,需要運用到memset函式,該函式的三個引數分別是:1.陣列首元素地址2.具體賦值數值(此函式按位元組賦值)3.陣列長度(位元組數))。

3.new在申請物件空間時,可以觸發構造和析構,C語言的malloc則無法觸發

當然,在申請變數,陣列或者結構體等等空間時,new和malloc的具體作用並無太大差別。

相關文章