[問題] struct 初始化 return struct 好還是 struct pointer好

看板C_and_CPP (C/C++)作者時間15年前 (2011/04/12 09:23), 編輯推噓2(2012)
留言14則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 在C語言中想要達到類似C++中constructor 初始化的功能, 則此function回傳時是直接回傳 struct 好, 還是在 function 中 malloc 後回傳 struct pointer 好。 程式碼(Code):(請善用置底文網頁, 記得排版) https://gist.github.com/914730 補充說明(Supplement): 如上面程式碼,兩者皆可以達成我想要的目的, 除了兩者所分配到的記憶體位置會在不同的區塊(Stack和Heap)。 我的想法是 struct s b = getStruct(); 會產生兩個 struct, 在 getStruct() return 時會將內部的 struct 內容複製給 b。 而 struct s* c = getStructPointer(); 則是 malloc 一塊記憶體, 透過 pointer 的複製使 struct s* c 也能取用到 malloc 的記憶體內容。 請問以上的想法是否正確呢? 不太確定是不是有回傳區域變數的問題存在。(若有概念上的錯誤請大家指正) 若正確在話除了記憶體位置的差別和malloc版本需要自己free外, 二者的寫法是否有哪一種比較好?還是看個人習慣即可? 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.107.58

04/12 09:41, , 1F
我偏好 InitialStruct(struct s*); 不用多copy一次也不一定要
04/12 09:41, 1F

04/12 09:41, , 2F
dynamic allocate
04/12 09:41, 2F

04/12 09:41, , 3F
回傳pointer不會花費struct的複製成本,而回傳struct會
04/12 09:41, 3F

04/12 09:42, , 4F
當struct很大、東西很多的時候,就會有效能上的差別
04/12 09:42, 4F

04/12 09:42, , 5F
不過回傳malloc的pointer,呼叫函式的人就要負責free掉
04/12 09:42, 5F

04/12 09:43, , 6F
我也覺得一樓的方式最好,交給呼叫函式的來負責 XD
04/12 09:43, 6F

04/12 09:43, , 7F
一樓的方法真的不錯 :p
04/12 09:43, 7F

04/12 11:07, , 8F
不考慮複製的成本的話, 差別在於你的「建構次數」、「
04/12 11:07, 8F

04/12 11:08, , 9F
釋放資源的責任歸屬」, 不只有語法上有差別, 語意也不
04/12 11:08, 9F

04/12 11:08, , 10F
一樣, 看你的架構怎麼做, 是要所有的物件都只存活在
04/12 11:08, 10F

04/12 11:09, , 11F
heap裡, 還是有其他考量...
04/12 11:09, 11F

04/12 11:16, , 12F
好壞沒有絕對
04/12 11:16, 12F

04/13 22:53, , 13F
我看過幾個project都是用一樓的作法 也就是明確呼叫initial
04/13 22:53, 13F

04/13 22:56, , 14F
印象中GTK+好像也是這樣的方式....
04/13 22:56, 14F
文章代碼(AID): #1DewcCts (C_and_CPP)
文章代碼(AID): #1DewcCts (C_and_CPP)