看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
asilzheng: 多建一個flag判斷不好嗎? 06/24 10:23
Jockey66666: 看起來你是需要另外一個function去做delete 06/24 10:33
s4300026: 善用RAII 06/24 11:23
kwpn: 何不用std string 06/24 11:41
steve1012: 這樣不會leak嗎 還是你會在function 裡面delete 06/24 11:46
steve1012: 善用raii 是重點 或是你用string 06/24 11:47
Killercat: 這段code其實打從邏輯上就有點問題了吧 06/24 13:18
shadow0326: 最少也要傳char**B吧 06/24 13:45
Killercat: 問題是這段code也不太在乎B上面本來的東西 XD 06/24 16:11
Killercat: 所以看起來也不太在乎B能不能正確的傳出去(死 06/24 16:11
pttworld: 回傳char* 06/24 19:41
aiwhat: 單純看這段 code 感覺只是需要在 B 是 nullptr 時給一個 06/24 21:24
aiwhat: 預設值,可以考慮用一個 const char* D = "..." 06/24 21:26
aiwhat: if(!B) B = D; 這樣 06/24 21:26
aiwhat: 不過前提是 C 的內容是固定的 06/24 21:28
slovil: 謝謝aiwhat這似乎是一個好辦法。這確實是要給一個預設值 06/24 21:43
aiwhat: 後續運算需要透過 B 改預設值內容的話建議還是改用 06/24 22:12
aiwhat: std::string 06/24 22:13