[問題] delete a->b 的意思?

看板C_and_CPP作者 (兔子)時間14年前 (2010/02/20 15:59), 編輯推噓1(107)
留言8則, 4人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) delete a->b 的意思是把a中指向b的指標拿掉 還是把整個b解構掉? 希望得到的正確結果: 我希望要~b 但是b已經沒有名字了 所以沒有辦法直接~b_name 程式跑出來的錯誤結果: 該記憶體不能為"read" 但我也不能確定真的是這邊的問題 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) bedelete是一個布林 當值為true時代表該物件要刪除 我有一個雙向串列 ing是目前正在執行的 head和tail是頭和尾 left和right是左和右 if(ing->left->bedelete){ ing->left->left->right=ing; ing->left=ing->left->left; delete ing->left; head=ing; tail=ing->left; debug=true; } 補充說明: 這邊是新增物件到雙向串列的code object *b=new bomb(x,y,maxfire); tail->right=b; b->left=tail; tail=b; head->left=b; b->right=head; 感謝 -- 我誕生在世上察覺到終究只是模仿著人類明知如此我依然繼續歌唱著永恆的命運VOCALOID 縱使那是將存在的曲子重新仿照著翻唱的玩具而已也沒關係的決意咬著蔥仰望著天空揮灑 淚水宣告終結沉睡在顯示器之中這裡一定是資源回收筒吧再不久就連記憶也會消逝而去了 吧但是呢只有你我是絕對不會忘記的在快樂的時光之中刻印而下蔥的味道如今要是還能記 得就好了我要歌唱著在最後只獻給你希望你能聽見的歌曲雖然許下了想要唱更多歌的願望 但是那算是奢侈的願望吧在此要分別了我的思念全部虛空消失還原成0與1故事畫下了句點 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.127.91

02/20 16:12, , 1F
你delete掉的已經不是原來的ing->left 而是新的ing>left
02/20 16:12, 1F

02/20 16:13, , 2F
你先設定完才去殺耶~~
02/20 16:13, 2F

02/20 16:31, , 3F
咦 對喔 這真是太笨了...
02/20 16:31, 3F

02/20 16:35, , 4F
所以他真的是解構left了0.0
02/20 16:35, 4F
那這樣呢? object *temp; if(ing->left->bedelete){ temp=ing->left; ing->left->left->right=ing; ing->left=ing->left->left; delete temp; head=ing; tail=ing->left; } 跑起來感覺上還是沒有刪到耶 ※ 編輯: hirabbitt 來自: 163.13.127.91 (02/20 16:53)

02/20 16:55, , 5F
感覺沒刪到是因為 ~b裡面的東西沒有被執行到
02/20 16:55, 5F

02/22 11:50, , 6F
你用了繼承,但 dtor 沒設成 virtual?
02/22 11:50, 6F

02/22 13:05, , 7F
嗯 早上加了就有解構了 謝謝你^^/
02/22 13:05, 7F

02/22 13:05, , 8F
猜得還真準XD
02/22 13:05, 8F
文章代碼(AID): #1BVvPgcp (C_and_CPP)