c++ delete 和 free的区别?
天蓬老师
天蓬老师 2017-04-17 13:24:10
0
9
705

链表节点移除

    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把后面的节点一起释放掉了?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(9)
小葫芦

好的習慣是成對使用

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

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

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

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

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

黄舟

其實應該是這樣的
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

PHPzhong

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

洪涛

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

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

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

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

Peter_Zhu

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

巴扎黑

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

Ty80

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

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

大家讲道理

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

迷茫

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板