亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++鏈表節點刪除方法,如何合適的釋放內存

C++鏈表節點刪除方法,如何合適的釋放內存

梵蒂岡之花 2019-04-10 20:48:06
讓我先描述下……實現這樣一個方法,刪除不帶頭單鏈表中與val值相同的結點方法簽名:ListNode*removeElements(ListNode*head,intval);ListNode類聲明classListNode{public:ListNode(intx):val(x),next(NULL){}intval;ListNode*next;};邏輯很簡單,當//...pre->next=p->next;//...之后,一般的做法是deletep;但這時,有個問題。當主調函數中寫如下調用時,會出內存問題ListNoden0(0),n1(1),n2(2);n0.next=&n1;n1.next=&n2;//...removeElements(&n0,2);n2結點的內存是不可delete的……另外,如果在removeElements方法中不寫delete邏輯,如果主調函數中,鏈表結點是new出來的,則不delete會內存泄露So…我想問一下,在實現類似的C++函數時,有什么一般的做法,或者業內默認規定?或者,有沒有更nice的處理方式?能讓方法比較安全且避免內存泄露多謝:-)
查看完整描述

2 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

既然有ListNode,就應該有List類,將removeElements封裝到List類中,由List類負責內存的分配和釋放;
這樣責任就清晰了。
再就是結點的分配一般都是在堆上申請,在棧上連接起來的結點當然無法刪除;
如果非得需要按照你這樣的實現,在棧上應用list,那么只用更改結點指針就好了,不用delete,棧上的即結點在退出程序邏輯范圍時自動刪除了;
                            
查看完整回答
反對 回復 2019-04-10
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

最不動腦子的方法,用shared_ptr,當然在你這個問題中這樣顯得有點傻。
所以你應該把所有要刪除的節點放到另外一個list里,等到真的不用的時候統一刪掉就好。
                            
查看完整回答
反對 回復 2019-04-10
  • 2 回答
  • 0 關注
  • 415 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號