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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com