什么是好的,什么是错的? 在这种情况下,我是否必须调用delete以防止内存泄漏? 此外,C和C ++中的行为是否完全相同? 有什么不同吗?
const char* a = "blahblah"; ... delete a; char b* = new char('a'); ... delete b; char c[100] = "blahblah"; ... delete c; char d* = new char[40]; ... delete d; char e* = new char[40]; ... delete[] e;
在这种情况下,我必须调用delete以防止内存泄漏
只delete
你从new
并delete []
你从new []
。 其他每次删除都是错误的。
规则很简单:
通过遵循这些规则,您可以看到只有b
和e
的删除有效:
他们都错了。 不要在C ++程序中调用delete
(除非您直接实现内存管理原语,如智能指针) – 始终使用智能指针来处理资源破坏。 对于数组,使用像std::vector
这样的容器。 对于字符串,有一个专用的std::string
类。 最后,除了new
之外没有原始情况创建适合delete
对象,无论是直接还是正确(通过智能指针),所以如果你没有使用new
或者调用一个显式返回的函数(它应该真正返回一个智能指针) …),然后你肯定做错了。
此外,C和C ++中的行为是否完全相同? 有什么不同吗?
C中没有delete
,C也没有delete
。 只有free
,与malloc
对应。
遵循三条规则:
规则是,如果你new/new[]
那么你必须使用相应的delete/delete[]
。
delete b; delete[] e;
这些是唯一正确的删除。
根据经验:
这些规则不考虑exception处理。 要确保代码exception安全,请使用智能指针。 当你的意思是“字符串”时使用std::string
。
以上就是c/c++开发分享C ++中的C字符串删除相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545952.html