[問題] 會改變指標內容的函數的API

看板C_and_CPP作者 (ㄆㄆ)時間10年前 (2013/09/17 23:40), 編輯推噓0(0019)
留言19則, 5人參與, 最新討論串1/1
請問如果要撰寫一個函數 預期傳入它的指標位置會改變 那API通常怎樣設計會比較好呢 以參數為 Object *obj; 設計一個 modify_obj 的function為例子 case A: obj = modify_obj(obj) //之後對obj做必要檢查 case B: modify_obj(&obj) //之後對obj做必要檢查 這兩種設計 有什麼優缺點 或是說 有什麼使用上的偏好嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.69.232 ※ 編輯: EntHeEnd 來自: 1.162.69.232 (09/18 00:01)

09/18 11:24, , 1F
如果是 int a; a = modify(a);跟modify(&a); 比你有偏好嗎?
09/18 11:24, 1F

09/18 11:26, , 2F
此外如果你在 modify_obj() 內有重新配置記憶體. A 感覺不好
09/18 11:26, 2F

09/18 11:28, , 3F
考慮 modify_obj 的語意. 如果 obj "必定" 要改,我會選 B
09/18 11:28, 3F

09/18 11:45, , 4F
obj->modify(); 搞定
09/18 11:45, 4F

09/18 18:24, , 5F
loveme大大好樣的!
09/18 18:24, 5F

09/18 19:48, , 6F
l 大的意思是成員函式也可以改物件指標本身的位址嗎. 很特別
09/18 19:48, 6F

09/18 20:21, , 7F
modify() 是對原物件的操作, 如果是會產生新物件就不
09/18 20:21, 7F

09/18 20:22, , 8F
叫 modify() 而是叫做 create() 之類的名稱, 那這樣就
09/18 20:22, 8F

09/18 20:23, , 9F
要反問自己傳進去的指標變數究竟是本來就指向一個物件
09/18 20:23, 9F

09/18 20:24, , 10F
還是作為一個output參數來使用, 再來討論 API 的設計
09/18 20:24, 10F

09/18 20:25, , 11F
叫作 modify() 而且本來指向既存物件的話
09/18 20:25, 11F

09/18 20:25, , 12F
obj->modify(); 無誤
09/18 20:25, 12F

09/18 20:56, , 13F
了解. 我認為還是要看原 po 對 modify 的語意認知. 以及使用
09/18 20:56, 13F

09/18 20:57, , 14F
的語言 (C或C++). 要我選我會多一個包裝的類別
09/18 20:57, 14F

09/18 21:51, , 15F
想到今天才被D3DXGetShaderConstantTable婊XD
09/18 21:51, 15F

09/18 21:52, , 16F
明明叫get卻會偷偷吃記憶體吃到爆炸為止
09/18 21:52, 16F

09/18 23:57, , 17F
hmm...... 了解 謝謝各位的解答^^
09/18 23:57, 17F

09/19 00:00, , 18F
我是比較偏好第二種... 就C來說 只是兩種都有人用所以想
09/19 00:00, 18F

09/19 00:00, , 19F
討論看看
09/19 00:00, 19F
文章代碼(AID): #1IE7VfX3 (C_and_CPP)