C++核心准则​​ES.61:使用delete[]销毁数组,使用delete销毁对象

面向对象思考

共 1046字,需浏览 3分钟

 ·

2020-05-21 23:21

34e70334e41f4180d613a51e8e55d60d.webp

ES.61: Delete arrays using delete[] and non-arrays using delete

ES.61:使用delete[]销毁数组,使用delete销毁对象


Reason(原因)

That's what the language requires and mistakes can lead to resource release errors and/or memory corruption.

这是C++语言的要求,如果用错会导致资源释放错误或者内存破坏。


Example, bad(反面示例)

void f(int n)
{
auto p = new X[n]; // n default constructed Xs
// ...
delete p; // error: just delete the object p, rather than delete the array p[]
}
Note(注意)

This example not only violates the no naked new rule as in the previous example, it has many more problems.

示例代码不仅违反了前面示例中的禁止暴露的new规则,还有更多其他错误。


Enforcement(实施建议)
  • If the new and the delete are in the same scope, mistakes can be flagged.

  • 如果new和delete同属一个作用域,错误可以被标记。

  • If the new and the delete are in a constructor/destructor pair, mistakes can be flagged.

  • 如果new和delete分别位于构造函数和析构函数,错误可以被标记。


原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es61-delete-arrays-using-delete-and-non-arrays-using-delete



觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!


浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报