Re: pointer, refernce, iterator

看板Programming作者 (Alien)時間17年前 (2009/04/10 11:26), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《sorryChen (陳揚和)》之銘言: : 這肯定是經典的老問題 怪我c++沒學好 : 今天被說 : (1) 程式中最好不要有 *pointer 即使有也要想辦法改成iterator : (2) 傳的時候也不要傳pointer要傳reference.. : (3) 程式裏最好越少new越好... : (1) 首先我不太清楚 如果就單純一個指到object的pointer.. : 要怎麼typedef 成iterator..有什麼好處, : stl container有提供的iterator type, 但如果不是用container 也要換成iterator嗎 (1) 肯定是胡說八道,或者說了一半沒說一半。 Iterator 本身這個 pattern 就是用來讓你 iterate thru 一個 data collection 用的,和 pointer 根本是不能互 相取代的。 : (2)傳的時候不傳pointer..傳reference.. : 但我可能object中就有pointer指到別的object 我要傳進來把pointer存起來 : reference傳完在function中用完 好像就沒辦法存起來吧 (2) 各有適用的地方,但的確,我的話,寫 method 之類 我會盡量傳 reference 而不是 pointer, 一來看起來清 楚,用起來也方便 (不必一天到晚 deref). 除非有些一定 要用 pointer 的情況才會傳pointer. : (3)不用new...怎麼可能阿...我object中有許多pointer.. : 他們得要接受別人傳進來的pointer..或自行new那個object.. : 怎麼樣的structure 可不用new呢 是用c而不用C++嗎 我覺得重點是不要隨處亂 new 吧。 因為根本不可能不從 heap 取得 memory,怎可能 所有 application 都只靠 stack 呢? 把物件的從屬關係定好,再安排對應的 allocate/deallocate 責任,把東西都包好之後,的確在程式流程中,需要特地 new 的情況真的很少 alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.77.1.222

04/11 12:40, , 1F
deref有什麼壞處嗎 (容易指到未定易處)
04/11 12:40, 1F
另外用起來方便程度差很遠。 試想你 overload 了 operator: (ptr 的 case) *newNum = (*oldNum1) + (*oldNum2); 和 (ref) newNum = oldNum1 + oldNum2; 另外 reference 一經 init 不能指往別處,*在某些情況下* 也是一個好處

04/11 12:41, , 2F
感謝 都是我在問問題
04/11 12:41, 2F
※ 編輯: adrianshum 來自: 219.77.1.222 (04/11 12:52)
文章代碼(AID): #19thnfnm (Programming)
文章代碼(AID): #19thnfnm (Programming)