[问题] 请问一个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