Re: pointer, refernce, iterator
※ 引述《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
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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):