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的邀请.