→ sarafciel: 我覺得你把物件變數的記憶體控管交出去就開始錯了 07/23 19:47
→ sarafciel: 要嘛寫member function把生member variable的部分封裝 07/23 19:51
→ sarafciel: 起來給使用者call 要嘛丟進來的東西你自己再new一塊做 07/23 19:52
→ sarafciel: copy 07/23 19:53
推 AstralBrain: 我覺得smart pointer唯一解 07/23 20:21
推 BlazarArc: 沒有說明Foo跟ICallBack的生命週期跟擁有權沒辦法回答 07/23 20:26
→ BlazarArc: 你的看法那段的理由我覺得還蠻弱的 我會預設用ref 07/23 20:28
→ BlazarArc: 不用ref的理由, class需要被copy 07/23 20:28
→ lovejomi: 生命周期都比這class本身久, 我知道理由很弱,但我很 07/23 20:32
→ lovejomi: 難描述我不想用ref的理由,總覺得不夠彈性 07/23 20:32
→ sarafciel: 阿對還有smart pointer這個解 我老了QQ 07/23 22:15
→ nobodycares: std::function 選我正解好嗎 07/23 22:40
→ Killercat: 你要考慮callback生命週期 用reference傳入的話 07/23 23:35
→ Killercat: 其實有很高的機率會發生人為錯誤 07/23 23:35
→ Killercat: pointer除非耍蠢 很不自然的傳一個local variable的 07/23 23:36
→ Killercat: pointer進來 不然基本上不太會出包 但ref機率高得多 07/23 23:36
→ Killercat: 另外 smart pointer是通用解沒錯... 07/23 23:37
推 eye5002003: 我的習慣是如果會改變外部狀態就用指標,使用但是不會 07/24 00:44
→ eye5002003: 去改變外部就用ref(常常搭配const來保證不會修改) 07/24 00:45
推 eye5002003: 還需要擔心生命週期的情況就都用std::shared_ptr處理 07/24 00:50
推 ketrobo: ref比較好,B(A&),如果正確依照物件生命週期設計,乾淨的 07/24 02:23
→ ketrobo: 程式結構會是B先結束,之後才是A結束,用pointer會變成語 07/24 02:23
→ ketrobo: 法上少了限制,隨便寫都會產生cyclic dependency的問題, 07/24 02:23
→ ketrobo: 造成物件生命週期結束這塊非常難寫,然後系統資源沒釋放 07/24 02:23
→ ketrobo: 完,浪費工程師的生命在找問題,最後跟你說解決的辦法是定 07/24 02:23
→ ketrobo: 期reset整臺機器…簡單講B(A&)很自然就從語法上讓你設計 07/24 02:23
→ ketrobo: 出遵循著RAII的程式結構 07/24 02:23
→ tinlans: 從語法層級探討很沒意義,高興怎樣就怎樣啊,真非要用 07/24 05:47
→ tinlans: reference 還有 reference_wrapper 可以活用。 07/24 05:47
→ tinlans: 正確來講還是要從生命週期去探討,用更高階抽象的概念來 07/24 05:48
→ tinlans: 說就是 aggregation 跟 composition 的差異。 07/24 05:48
→ tinlans: 如果對這兩個名詞陌生,可能要去補足一下 OOAD 的知識。 07/24 05:49
→ tinlans: 身為一名工程師,設計圖之類的當然要會畫,然後按圖施工 07/24 05:50
→ tinlans: ,今天會有這種問題跑出來就是因為你沒圖。 07/24 05:50
推 andyjy12: reference 不能直接更換綁定對象 07/28 12:57