看板 C_and_CPP 關於我們 聯絡資訊
最近在思考一個問題, 就是 data 和 function 是否需要分不同的class, 因為 有時候, 很多 function 的資料 就是丟參數進去, 再回傳資料, 不會需要動到 this 的 member 的 data, 所以這類的 function 我另外獨立一個class, 並且是唯一的 class, 甚至 就算需要動到 this 的 member 的 data, 我可以把整個 data 的 pointer 丟給他, 讓他去給, 也就是完全把 data和 function, 分成不同的 class, 這樣 function 就不用new delete 了, 只需要new delete data, 可以節省效能????? 但是又聽說 在c++的底層, function 和 data, 本來就有做不同的處理, function 本來就有獨立出來, 所以不需要這樣???? 不過查不到確定的資料....... 想請問大家的想法????? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.35.163.53 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1453608256.A.72E.html
x000032001: 不需要member 那就static func啊 甚至給他namespace 01/24 12:22
x000032001: 就好也不用塞進class了 01/24 12:22
那~~ 有需要刻意去拆開嗎 這對效能有幫助嗎??? 還是沒幫助? 只是多此一舉????
Caesar08: 看完不知道你在說甚麼東西 另外中間function那段 01/24 13:13
Caesar08: 你要function new delete甚麼東西? 01/24 13:13
Caesar08: 不用"動"到data member,那你寫const就好 01/24 13:16
Caesar08: 不用"用"到data member,那你就參考一樓的作法 01/24 13:16
抱歉喔 我寫得太簡單了 例如有個 class class A { int abc; int Add( int a, int b ); }; 我把它拆成 class data { int abc; }; class func { int Add( data &a, int a, int b ); }; 這樣子, class func 在全部的程式中, 大家都可以共用一個就好了, 要new delete 時, 就只需要 new delete data, 那如果是原本的做法 class A, new delete 時, 還必須處理 Add(); 這樣拆開來, 是否會比較省資源和效能???? ※ 編輯: yhn0tgb60 (218.35.163.53), 01/24/2016 13:31:04
Clangpp: 其實這就是一種design pattern阿XD 01/24 13:34
Clangpp: 不用 上面有說了 你用namespace就好 01/24 13:37
Clangpp: 然後 effective C++ item 23 寧以non-member non-friend 01/24 13:38
Clangpp: 取代member 函式不知道能不能解釋你的問題 01/24 13:39
Caesar08: 不會,而且你這樣func需要是data的friend 01/24 13:43
Caesar08: 除非逼不得以,否則friend還是少用為妙 01/24 13:44
Caesar08: 不過聽我這樣說,還不如參考standard C++是怎麼說的 01/24 13:45
Caesar08: https://isocpp.org/wiki/faq/friends 01/24 13:45
其實我 frined 用很多...... 因為我全部的 class 都把 建構式和解構式 藏起了 只有相關的 factory 才能 new delete 它........ 然後 factory 也都是單一物件..... 但是又聽說 static 不適合太多 所以就用一個 static class, 全部的 factory 只有 那個 class 可以 new.....
bibo9901: 你這樣跟non-virtual member function一模一樣啊 01/24 18:16
bibo9901: 又何苦分兩邊寫 01/24 18:16
firejox: 你可以去研究function pointer 01/24 18:45
firejox: member funciton 跟這個有關係 01/24 18:46
ronin728: 拆不拆開效率不會差太多。獨立函數別再另外包class,請 01/24 18:59
ronin728: 用namespace,除非你是為了滿足某種設計模式。 01/24 18:59
ronin728: 如果你 friend 真的用很多,可能有過度耦合的問題 01/24 19:01
CoNsTaR: static 和 anonymous-namespace 對 function 的效果是一 01/24 23:45
CoNsTaR: 樣的吧 01/24 23:46
CoNsTaR: 不喜歡 static 可以改用 namespace 01/24 23:46
tinlans: member functions 原本就不會被 new / delete 01/26 01:34
tinlans: 去顧慮這些東西是玩什麼玩到走火入魔啊? 01/26 01:35
在寫自己的framwork XD
fr3ak: 相關廢文 http://goo.gl/ICm7mu 01/27 09:17
fr3ak: 希望原 po 只是在練習寫 framework QQ 01/27 09:19
你有什麼悲情的故事嗎 關於寫framework XD
jerohands: 除非你是想用 Private Class Data 01/27 19:54
tinlans: 如果分開的目的是節省效能,那完全達不到你要的目的。 01/28 00:08
fr3ak: To 原 po. Framework 是基底, 一旦被應用採納, 要改動的成 01/29 11:37
fr3ak: 本通常不小, 尤其是界面. 即便有大量的經驗與深厚的技術都 01/29 11:37
fr3ak: 不記得能把 framework 做得好. 01/29 11:37
fr3ak: 另, 不論是 framework 或 component-based 的 library, 遠 01/29 11:40
fr3ak: 遠不只是 "寫 code" 這麼單純. IMHO, 更重要的是 "設計" 01/29 11:40
是的 這是一定的 所以我寫 framework 是寫自己開心的和當作品用 而且自己寫 framework 時, 會增加思考很多事情, 可以學到很多, 工作上 我一定找現成的 而且有一定的市場使用率的 來使用 ※ 編輯: yhn0tgb60 (220.132.169.16), 01/29/2016 18:14:16
CoNsTaR: Java 的陣列是物件,它就是這樣的實作方式 01/29 19:36
CoNsTaR: 陣列除了 lenght 以外的成員函式都被放在 java.util.Arra 01/29 19:36
CoNsTaR: ys 01/29 19:36
CoNsTaR: 而陣列這個 class 則由 JVM 動態生成 01/29 19:36