作者KanoLoa (卡)
看板C_and_CPP
標題Re: [問題] 直接呼叫解構子
時間Tue Oct 19 09:42:08 2010
: 以上的作法, 因為此五個物件 是由array new來配置, 也
: 應該經由 delete [] 來一起銷毀( 撇開原地建置的情形)
: , 中途如果隨便去刪除某一個匿名物件, 那麼在最後 de-
: lete A時將會再呼叫一次建構子, 因為沒有合適的物件存
: 在該位置上, 會當機也不意外了, 另外還有一種極端的例
: 子
如果我最後並沒有打算做 Delete A的動作,
並且在我每次刪除A[n]時,塞一個新的回去呢: A[n] = new Class();
這樣也會崩潰嗎?
: // 建立物件
: for( ContainerType::iterator it = A.begin();
: it != A.end(); ++it )
: {
: it->reset( new Class );
: }
: // 刪除某一個物件
: A[ 3 ].reset();
原來有這種方式,感謝。
: 其實要用 pointer to pointers來作也是可以的, 不過要
: 很小心上面說過的情況
: Class **A = new Class*[ 10 ];
: // 建立物件
: for( int index = 0; index != 10; ++index )
: A[ index ] = new Class;
: // 刪除物件
: delete A[ 3 ];
原本也是想用這樣的方式來實做。
只是想說能不能更精簡一點,讓指標層次再少一點,
硬是用一層去做看看…結果就是崩潰 T_T
: 不過再回來看看你的需求, 我有個疑問 :「一個物件是否
: 真的必需因為資源使用完畢而一定要被刪除」?因為像是
: 標準庫的 fstream 也可以透過 open/close來操作其他檔
: 案, 如果沒有特別強烈要求, 通常我會在Class 類別內加
: 入 create、destroy等方法來重複使用該物件.
老實說這需求我也覺得沒必要馬上刪除,
但是需求設定就擺在那…
「要求刪除時要能透過 解構子顯示已經刪除訊息。」
感謝你的解答 m(_ _)m
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.45.36
→ loveme00835:A[n] = new Class(); ←這裡的左右型態根本不對, 而且 10/19 09:44
→ loveme00835:如果你已經刪除 A[n], 那呼叫operator=的行為根本未定 10/19 09:45
→ loveme00835:義 10/19 09:45
→ KanoLoa:阿,學藝不精,再次感謝你 10/19 09:46