[問題] 動態class釋放

看板C_and_CPP (C/C++)作者 (daSd)時間14年前 (2012/05/27 22:40), 編輯推噓1(108)
留言9則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCB 程式碼(Code):(請善用置底文網頁, 記得排版) class OneInfo { public: int Value; }; class TwoInfo { public: OneInfo One; }; class ThreeInfo { public: TwoInfo *Two; }; ======================== void __fastcall TForm1::Button1Click(TObject *Sender) { int ThreeNum=3, TwoNum=2; ThreeInfo *Three; Three = new ThreeInfo[ThreeNum]; for (int i=0; i<ThreeNum; i++) { Three[i].Two = new TwoInfo[TwoNum]; for (int j=0; j<TwoNum; j++) { Three[i].Two[j].One.Value=i+j; } } //^^^^^^^^^^^^^動態宣告了一個三層的class //vvvvvvvvvvvvv想要釋放所宣告的動態class for (int i=0; i<ThreeNum; i++) { for (int j=0; j<TwoNum; j++) { delete[] Three[i].Two[j]; //<--這樣寫不會過 //E2157 Deleting an object requires exactly one //conversion to pointer operator } } } ====================== 請問一下要如何寫呢? 新手笨問題..請見諒 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.182.179.107

05/27 22:46, , 1F
delete[] ... ?
05/27 22:46, 1F
抱歉.少打了..加了[]還是有error

05/27 23:00, , 2F
把你看到的error message貼上來,也可以拿去google看看
05/27 23:00, 2F
※ 編輯: clough 來自: 175.182.179.107 (05/27 23:09)

05/27 23:19, , 3F
個人覺得你只動態要了兩層; Two是一維指標, 那Two[j] ?
05/27 23:19, 3F

05/27 23:20, , 4F
你貼的err msg就明白的說delete的對象必須要是個指標,
05/27 23:20, 4F

05/27 23:20, , 5F
這就是小弟上面問的, 你想想Two[j]出來是什麼東西:)
05/27 23:20, 5F

05/28 07:28, , 6F
Three[i].Two = new TwoInfo[TwoNum];
05/28 07:28, 6F

05/28 07:28, , 7F
delete [] Three[i].Two;
05/28 07:28, 7F

05/28 07:29, , 8F
一次 new 的可以一次刪
05/28 07:29, 8F

05/28 09:45, , 9F
謝謝..我再試試看
05/28 09:45, 9F
文章代碼(AID): #1FmZpqbQ (C_and_CPP)
文章代碼(AID): #1FmZpqbQ (C_and_CPP)