c/c++开发分享C ++中的C字符串删除

什么是好的,什么是错的? 在这种情况下,我是否必须调用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你从newdelete []你从new [] 。 其他每次删除都是错误的。

    规则很简单:

    通过遵循这些规则,您可以看到只有be的删除有效:

    他们都错了。 不要在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++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545952.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注