Re: [問題] 有關運算子多載

看板C_and_CPP作者 (藍影)時間14年前 (2011/11/04 08:12), 編輯推噓2(204)
留言6則, 5人參與, 最新討論串2/3 (看更多)
借個標題問,由於大型專案經驗較少,我想問的是設計模式或一些經驗。

11/03 22:36,
你要寫operator= 把預設的 memberwise copy 改掉
11/03 22:36

11/03 22:38,
assign到c的時候是正確的,但這時候有兩個物件指到同一
11/03 22:38

11/03 22:39,
塊記憶體 (一個是c另一個是暫時物件)
11/03 22:39

11/03 22:39,
兩個物件解構時會造成 double delete
11/03 22:39
以 matrix 而言,陣列那假設用 double **arr; 一般在設計時是較常用 shallow copy 或 deep copy ? 我是走 deep copy, 實際在用時較不容易發生 因為變數太多, 哪一個物件指到哪塊記憶體整個亂掉 (可能因人而異吧), 最重要的原因是,我解決不了 shallow copy 裡 double delete 問題 。 一想到維度一大就不適合用 deep copy,一方面記憶體不夠用, 一方面要複製會很花時間,最後想用鳥一點的方式取折衷 xMaxtrix& xMatrix:: scopy( const xMatrix& m) const; /* shallow */ xMatrix xMatrix:: dcopy( const xMatrix& m) const; /* deep */ xMatrix xMatrix:: operator = () const; /* 裡面做 shallow copy */ 不過完全不能以 shall copy 進行, (所以上面 code 也是白寫的 Orz) 因為做 shall copy , 最後物件解構時, 便如 littleshan 所言會有 double delete 情形發生, 不知是否有解決方案? ---- 另一問題是例外處理部份,我拿「高斯消去法」的例子做提問, class xMatrix ; vector<double> GaussJodarn(xMatrix lhs, vector<double> rhs); 在設計高斯消去法時,有幾個要點注意 1. 原本 n*m 矩陣,是否其中有幾個無效方程式,進而可等價成 n*n 方陣 (expect) 2. 消去法過程中 ,可能會出現 0 0 0 | 1 , 無解情形 (expect) 3. 消去法過程中 ,可能會出現 0 0 0 | 0 , 無限多解情形 (expect) 主要例外有這三組,問題如下, a. 有必要在 GaussJodarn 裡面做複製 xMatrix lhs 嗎 ? 還是就學 strtok 搞法,丟進去後就不能再用? b. 上面的 2.3 例外,在判斷是否可能有無解、無限多解情況下, 要確認的話,執行時間會拉很長,實際上在撰此副函式時, 是否會直接忽略例外發生之可能性,即 假設方程組必然唯一解? 而其它的例外確認動作,由 caller 端進行保證? ↑這樣感覺是有點怪怪的,因為就是不知道方程組的情形, 才用程式為之代勞,一直覺得這是個 trade off 問題, 好奇不知各位版友會如何設計? c. 如果 b 要處理的話 , 通常是做 log file 嗎 ? 其他的後續處理動作就叫別人看 log file ? 還是會再寫一份 expect class, (裡面 catch 也是 char*) 這樣別人去要 trace 的時候不就還要再去看那份 expect class 怎麼寫的? 以上,問題有點雜,煩請各版友不吝分享、解惑, 謝謝各位,小弟感激不盡。 -- No matter how gifted you are, alone, can not change the world. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.78.41 ※ 編輯: tropical72 來自: 180.177.78.41 (11/04 08:17)

11/04 10:09, , 1F
用factory模式? 也就是用一個大的class統一生產管理
11/04 10:09, 1F

11/04 10:10, , 2F
當ref count歸零才做delete
11/04 10:10, 2F

11/04 10:50, , 3F
11/04 10:50, 3F

11/04 12:01, , 4F
c++0x的move語義似乎可以用上?
11/04 12:01, 4F

11/04 15:24, , 5F
shared pointer
11/04 15:24, 5F

11/04 19:54, , 6F
拿到不少 keyword, 謝謝樓上各位不吝指教 *^_^*
11/04 19:54, 6F
文章代碼(AID): #1EiotdNz (C_and_CPP)
文章代碼(AID): #1EiotdNz (C_and_CPP)