作者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/cn.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