S I*_*S I 1 c++ free memory-management
当,如果有的话,可以delete和free互换在C++中使用?
我的担忧如下:假设使用malloc/ free和
new/ delete(更不用说new[]/ delete[])有不正确的混淆.然而delete,free做同样的事情;
幸运的是,这在测试中没有受到影响.稍后这可能会导致生产崩溃.
我怎样才能强制执行某种检查以防止这种情况发生?如果这两个人混在一起,我可以得到警告吗?如果不是在编译时,可能在运行时有一些代码检测?我该如何处理?
这个问题的目的是找到避免在使用中无意混淆的方法.
小智 11
不让它们混淆的简单方法是永远不要使用malloc(),那么你永远不会想要调用free().为避免此问题而创建的基础结构称为"代码审查",但在这种情况下,快速"grep malloc("或"grep free("在代码库上可能就足够了).
决不.如果它的工作原理是纯粹的实施意外.不要依赖这种行为.
要回答第二个问题,如果你同时控制malloc/ free和operator new/ delete,你可以存储额外的信息,以便与两者返回的指针相关联,告诉你它们是如何分配的.当指针传递给free或时operator delete,检查它是否由相应的函数分配.如果没有,则断言或提出异常或做任何事情来报告不匹配.
通常这是通过分配额外的内存来完成的,例如,给定malloc(size)或者operator new(size),你size + additional space在那里分配和推送额外的信息.
你可以确保永远不会让他们混淆的唯一方法是:
手动调用删除或免费只是一个bug的邀请.
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |