3

我一直想知道它重新定义new. 我的意思是当开发人员使用:

#pragma push(macro,new)
#undef new

这是为了什么目的?我认为 new 运算符是所有编译器的标准?重新定义 new 是否为开发人员提供了一种方法来改变 new 为对象分配空间的方式?

4

1 回答 1

4

您可能会认为它可以记录 C++ 程序中发生的任何分配。所以你需要定义你自己的新操作来记录这个分配。您还需要重新定义删除以记录在 C++ 中进行的所有取消分配。

一些工具重新定义它并为内存块的开始和结束分配更多内存,并在头部和尾部中找出某些签名,以找出代码中的任何缓冲区溢出问题。您可以检查这样做的 MS 应用程序验证程序。

于 2012-08-31T01:48:07.010 回答