new/delete 和 malloc/free有什麼區別和聯繫

區別:函數

    1. new/delete是C++的操做符,malloc/free是C/C++標準庫函數spa

    2. new分爲兩步的:第一步是申請內存,第二步則是調用構造函數初始化對象。一樣,在調用delete的時候,須要先調用析構函數,而後再回收堆內存。malloc只會根據參數分配內存,默認返回指向void*的指針,一樣free釋放malloc分配的內存。指針

    3.malloc/free是new/delete的一個子集。code

共同點:對象

    1. 都必須配對使用,這裏的配對使用,可不能理解爲一個new/malloc就對應一個delete/free,而是指在做用域內,new/malloc所申請的內存,必須被有效釋放,不然將會致使內存泄露。內存

    2. 都是申請內存,釋放內存。作用域

示例:class

//pM指針指向sizeof(int)*100大小的內存塊
int* pM = (int *)malloc(sizeof(int)*100);
if (pM)
{
    free(pM);
    pM = NULL;
}

//pN建立100個int對象
int* pN = new int[100];
if (pN)
{
    delete []pN;
    pN = NULL;
}
相關文章
相關標籤/搜索