C++之new、delete 與malloc、free的異同

weixin_34162629發表於2017-04-09

        在C/C++程式設計中常常會申請記憶體。而對記憶體的申請釋放操作有兩套方法: new、delete 與malloc、free。他們的使用最好是成對使用,不要去混搭---這可不是時尚界哦。

例如以下是這兩組方法的異同或差別:

        1、new、delete是c++中的操作符,malloc、free是C中的一個函式,它們都可用於申請動態記憶體和釋放記憶體。

        2、new 不止是分配記憶體,並且會呼叫類的建構函式,同理delete會呼叫類的解構函式,而malloc則僅僅分配記憶體,不會進行初始化類成員的工作,相同free也不會呼叫解構函式。

因為malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內。不可以把執行建構函式和解構函式的任務強加於malloc/free。

        3、記憶體洩漏對於malloc或者new都能夠檢查出來的。差別在於new能夠指明是哪個檔案的哪一行。而malloc沒有這些資訊。 

        4、new的效率malloc略微低一些,new能夠覺得是malloc加建構函式的執行。new出來的指標是直接帶型別資訊的。 而malloc返回的都是void指標。

        5、malloc不會拋異常,而new會;無法重定義malloc失敗時的預設行為(返回NULL),可是我們能夠重定義new失敗時預設行為。比方不讓其丟擲異常。

相關文章