作者slovil (who am i? )
看板C_and_CPP
標題[問題] 請問一個new和delete的問題
時間Sat Jun 24 09:58:33 2017
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1498269516.A.ABB.html
1F:推 asilzheng: 多建一個flag判斷不好嗎? 06/24 10:23
2F:→ Jockey66666: 看起來你是需要另外一個function去做delete 06/24 10:33
3F:推 s4300026: 善用RAII 06/24 11:23
4F:推 kwpn: 何不用std string 06/24 11:41
5F:推 steve1012: 這樣不會leak嗎 還是你會在function 裡面delete 06/24 11:46
6F:→ steve1012: 善用raii 是重點 或是你用string 06/24 11:47
7F:→ Killercat: 這段code其實打從邏輯上就有點問題了吧 06/24 13:18
8F:→ shadow0326: 最少也要傳char**B吧 06/24 13:45
9F:→ Killercat: 問題是這段code也不太在乎B上面本來的東西 XD 06/24 16:11
10F:→ Killercat: 所以看起來也不太在乎B能不能正確的傳出去(死 06/24 16:11
11F:→ pttworld: 回傳char* 06/24 19:41
12F:→ aiwhat: 單純看這段 code 感覺只是需要在 B 是 nullptr 時給一個 06/24 21:24
13F:→ aiwhat: 預設值,可以考慮用一個 const char* D = "..." 06/24 21:26
14F:→ aiwhat: if(!B) B = D; 這樣 06/24 21:26
15F:→ aiwhat: 不過前提是 C 的內容是固定的 06/24 21:28
16F:→ slovil: 謝謝aiwhat這似乎是一個好辦法。這確實是要給一個預設值 06/24 21:43
17F:→ aiwhat: 後續運算需要透過 B 改預設值內容的話建議還是改用 06/24 22:12
18F:→ aiwhat: std::string 06/24 22:13