close

前言:這是昨天C++課時,老師提出的問題,之後如有找到更多,將依序補上。


1.發生錯誤時

最明顯的行為差異是,malloc 透過回傳值指出錯誤,而 new 則是會 throw std::bad_alloc。 
這表示如果程式當中沒有人捕捉 new 發生的異常,程式會自動安全的結束,意思是該解構、該釋放的東西都還是會正常處理掉。如果不檢查 malloc 回傳值導致的程式異常終止,就只能看運氣了。 

2.配置方式

malloc( ) 與 free( ) 和 new 與 delete 比較起來,最直觀的差別就是 new 的配置長度以陣列元素數量為單位,並且傳回該型別的指標,等於就是在配置動態陣列,例如 float * ptr = new float[100],而 malloc( ) 的配置長度以 bytes 為單位,不管你配置的目的為何,一律傳回 void * 指標,使用前須先轉型,例如上例中的 float * ptr = (float *)malloc(sizeof(float)*100)。

其實它們的差異不僅如此,由於 new 和 delete 是 C++ 語言中的保留字,它們在編譯的時候,編譯器可能會依照情況加入相關的動作,例如 new 一個結構體(struct)或類別(class)的單一或多個元素的陣列的時候,new 會執行 class 類別自訂的初始化動作(稱為建構函式, constructor),而 malloc( ) 只配置記憶體,不負責初始化。同樣地,delete 會執行 class 類別自訂的清理動作(稱為解構函式, destructor),free( ) 只釋放記憶體,不執行任何清理動作,以 malloc( ) 配置的記憶體不可以用 delete 釋放,反之亦然。



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 GavinHuang 的頭像
    GavinHuang

    Gavin的部落格

    GavinHuang 發表在 痞客邦 留言(0) 人氣()