看板 C_and_CPP 關於我們 聯絡資訊
: 以上的作法, 因為此五個物件 是由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