Re: [問題] 什麼時後 不該用/該用reference當member

作者: nobodycares (沒人在乎)   2018-07-23 20:07:48
※ 引述《lovejomi (JOMI)》之銘言:
: Foo(ICallback* callback)
: : mCallback(callback){ assert(mCallback); }
: 被問說那為什麼你mCallback不用reference 然後Foo就開成(ICallback&)就好
: 我不想這樣改
: 但我沒有強力的說法比較出哪一種比較好或是合理
: 我的看法
: 用ref, caller勢必要*ptr 做dereference才能傳進來
: 雖然說reference 可以當作non null去操作
: 但有心要傳*null也不是不行.
: 開reference 給別人傳,比起pointer更有機會caller不小心傳入local variable
: 以上都可以用一句話“哪有人會這樣寫”來否定用pointer存.
: 而用reference 可以給人一種 必定要想辦法生出一個物件才能呼叫的感覺...
: 實在想不到哪個時候 用reference
: 才是合理的寫法.
: 反而我自己是很少看過member 用reference去存...
: 不知道大家在design上會有什麼考量
: 謝謝
我整理一下你的文章
覺得應該將m_callback宣告為reference的理由
‧ 用reference可以讓使用者明白一定要有物件作引數才可以
覺得應該將mp_callback宣告為pointer的理由
‧ 我不想寫成reference
老實講我覺得這種問題 沒什麼必要來搬救兵
有些團隊文化就是要聽大老的 有些團隊以和為貴 有些團隊奔放自由 有些團隊會造神
這種問題 只是看你在哪種團隊 然後做的東西給誰用而已
如果你的程式碼是編譯完變軟體 給一般用戶用 我覺得真的沒差
如果你的程式碼是給別人用的 那個assert其實意義也不大
很多assert根本就是寫爽的 只是會跳視窗的TODO而已
所以在參數設計上刁難user 確實是有效果
但是認真討論下去 真的沒啥意義 就只是習慣問題而已
等等跳出第三個人來說:為什麼不用std::function就好
那不是沒完沒了?
對呀 為什麼你不用std::function就好?
作者: sa12e3   2018-07-23 21:17:00
...
作者: sarafciel (Cattuz)   2018-07-23 22:13:00
XDDDD
作者: Sidney0503 (Sidney0503)   2018-07-23 23:07:00
寫C++的原則:能用STL就用STL
作者: nobodycares (沒人在乎)   2018-07-23 23:09:00
也不一定啦 很多公司都喜歡自己重刻 我一年內看過四種string
作者: eye5002003 (下一夜)   2018-07-24 00:53:00
我有自己刻過string,後來又回去用std::string了因為後來覺得為了擴增功能而去建立新的字串容器很笨而且其他人應該也不喜歡看到這麼多變種
作者: legendmtg (CLANNAD)   2018-07-24 09:59:00
對呀 為什麼不用std::function就好
作者: Sex5F (HTC)   2018-07-24 16:07:00
因為他覺得方便啊,看不懂是你的問題開案的第一手RD最大一堆規則只用到一次..兩次..很常見code切成黑盒子有時真的不太必要就是了..反而是菜鳥才幹的...我是回string
作者: RadiationXen (Xen)   2018-07-27 19:43:00
推一下std::function
作者: AstralBrain   2018-07-28 14:27:00
std::function裡面包的東西要可copy結果你還是會遇到要包指標還是包reference_wrapper的問題
作者: Killercat (殺人貓™)   2018-07-29 08:56:00
其實就是因為std::string太弱才會有那麼多重刻 不過..老實講配boost::string應該夠滿足絕大多數需求了在沒滿足的就用外掛函數掛上去就好

Links booklink

Contact Us: admin [ a t ] ucptt.com