[問題] 請問一個new和delete的問題

看板C_and_CPP作者 (who am i? )時間7年前 (2017/06/24 09:58), 編輯推噓4(4014)
留言18則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) none 問題(Question): 請問要如何delete這程式中new出來的char? 這程式先判斷B是否為NULL,再決定要不要new C. 那該如何進行delete? 如果再程式最後面delete 若B不為NULL,那不是連原來的B都刪了? 新手問題,但是就是想不透 煩請各位大大指點迷津. void func(int A, char* B) { if (!B) B = new char(C); } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.248.185.226 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1498269516.A.ABB.html

06/24 10:23, , 1F
多建一個flag判斷不好嗎?
06/24 10:23, 1F

06/24 10:33, , 2F
看起來你是需要另外一個function去做delete
06/24 10:33, 2F

06/24 11:23, , 3F
善用RAII
06/24 11:23, 3F

06/24 11:41, , 4F
何不用std string
06/24 11:41, 4F

06/24 11:46, , 5F
這樣不會leak嗎 還是你會在function 裡面delete
06/24 11:46, 5F

06/24 11:47, , 6F
善用raii 是重點 或是你用string
06/24 11:47, 6F

06/24 13:18, , 7F
這段code其實打從邏輯上就有點問題了吧
06/24 13:18, 7F

06/24 13:45, , 8F
最少也要傳char**B吧
06/24 13:45, 8F

06/24 16:11, , 9F
問題是這段code也不太在乎B上面本來的東西 XD
06/24 16:11, 9F

06/24 16:11, , 10F
所以看起來也不太在乎B能不能正確的傳出去(死
06/24 16:11, 10F

06/24 19:41, , 11F
回傳char*
06/24 19:41, 11F

06/24 21:24, , 12F
單純看這段 code 感覺只是需要在 B 是 nullptr 時給一個
06/24 21:24, 12F

06/24 21:26, , 13F
預設值,可以考慮用一個 const char* D = "..."
06/24 21:26, 13F

06/24 21:26, , 14F
if(!B) B = D; 這樣
06/24 21:26, 14F

06/24 21:28, , 15F
不過前提是 C 的內容是固定的
06/24 21:28, 15F

06/24 21:43, , 16F
謝謝aiwhat這似乎是一個好辦法。這確實是要給一個預設值
06/24 21:43, 16F

06/24 22:12, , 17F
後續運算需要透過 B 改預設值內容的話建議還是改用
06/24 22:12, 17F

06/24 22:13, , 18F
std::string
06/24 22:13, 18F
文章代碼(AID): #1PJSTCgx (C_and_CPP)