首頁  >  問答  >  主體

c++ delete 和 free的区别?

链表节点移除

    if (head->next) {
        while (workptr->next && (workptr->next->index != index)) {
            workptr = workptr->next;
        }

        if (workptr->next) {
            tempptr = workptr->next;
            workptr->next = tempptr->next;
            free(tempptr); //这里用delete就会出错
            tempptr = nullptr;
            --this->size;
        }
    }

貌似delete把后面的节点一起释放掉了?

天蓬老师天蓬老师2715 天前648

全部回覆(9)我來回復

  • 高洛峰

    高洛峰2017-04-17 13:26:10

    好的習慣是成對使用

    ps: 為什麼我不很清楚,兄弟不要作死,先遵循這條信條,在慢慢搞明白原因

    new     <-->  delete
    new[]   <-->  delete[]
    malloc  <-->  free

    C++中的new/delete是新實現的内存分配器,而malloc和free是C標準庫實現的另一套内存分配器,他們走的是不同的演算法,所以當然不能混用了.

    至於一些奇葩的C++編譯器實現,可能用C標準庫中的free和malloc來實現new/delete,那我們還是不能確定能不能混用,如果你用了好使,也別混用

    總之他們就是兩個不同的事物,你問張三借了錢,不能去李四哪裡還啊

    回覆
    0
  • 黄舟

    黄舟2017-04-17 13:26:10

    其實應該是這樣的
    1) delete是關鍵字,而free是函式庫函數,
    C++關鍵字
    http://baike.baidu.com/link?url=TJ8RZ7ac_liACKZkHnQt0WCDQS9Lxj6pdpwiwpdpwpwpwpwwdpwpwpwp**pw*p; jUShwPi742hShgAq
    C的關鍵字是http://www.cnblogs.com/yezhenhan/archive/2011/10/16/2214420.html
    注意,在C的關鍵字清單裡沒有free
    2) 操作的物件不同, delete的操作物件是物件或物件數組,而free是void *
    3) C++的delete可以重載,也就數說,delete是物件方法,而一般沒人重載free

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:26:10

    話說 delete與new 是一一對應的,tempptr是用什麼方式申請的記憶體的啊? malloc嗎?如果沒有用new申請 自然不能用delete釋放。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:26:10

    看起來像delete把後面的節點一起釋放掉了?

    肯定不可能啊,這是鍊錶,空間不連續,不可能會把後面的節點釋放掉

    delete是運算符,如果指針指向的是對象,編譯器在編譯的時候除了產生釋放空間的指令以外,還會呼叫該對象的析構函數

    所以,會不會是析構函數的問題?

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:26:10

    delete是會呼叫析構函數再釋放記憶體的,new和delete不一定強製成​​對你可以malloc分配記憶體然後用placement new 在申請的記憶體上建構對象,讓後也可以用delete刪除他

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:26:10

    看你使用的什麼申請的空間啊,new的話用delete,malloc的用free,而且實際上malloc/free是c語言的用法,c++只是相容。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:26:10

    delete會在釋放之前調用析構。

    對於POD來說,這兩個函數行為相同,但是還是不提倡混著用。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:26:10

    new delete這對是物件
    free malloc這一對是記憶體

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:26:10

    http://stackoverflow.com/questions/240212/what-is-the-difference-Between-new-delete-and-malloc-free

    回覆
    0
  • 取消回覆