Re: [問題] 有關運算子多載
借個標題問,由於大型專案經驗較少,我想問的是設計模式或一些經驗。
推
11/03 22:36,
11/03 22:36
→
11/03 22:38,
11/03 22:38
→
11/03 22:39,
11/03 22:39
→
11/03 22:39,
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
11/04 10:09, 1F
→
11/04 10:10, , 2F
11/04 10:10, 2F
→
11/04 10:50, , 3F
11/04 10:50, 3F
推
11/04 12:01, , 4F
11/04 12:01, 4F
推
11/04 15:24, , 5F
11/04 15:24, 5F
→
11/04 19:54, , 6F
11/04 19:54, 6F
討論串 (同標題文章)