我刚开始尝试覆盖全局新建/删除(纯粹出于教育目的)并且遇到了问题。
我正在使用我的一个相当成熟的项目来测试几 k loc。我做的第一件事是覆盖 new
和 new[]
以简单地使用 malloc
并增加一个静态计数器。 new
似乎工作正常,但我注意到我的 new
被来自 newaop.cpp< 的
看起来像这样:new[]
的 crt 版本调用
void *__CRTDECL operator new[](size_t count) _THROW1(std::bad_alloc)
{ // try to allocate count bytes for an array
return (operator new(count));
}
我的版本是
void* operator new[](size_t count)
{
// malloc and whatnot
}
new[]
被一些 STL 函数调用。我的版本位于 .h/.cpp 文件中,该文件是项目中所有其他文件中的第一个包含文件。
今天早上我没有太多时间尝试找出原因,但如果有人能解释为什么我的版本没有被调用,我会很高兴。
编辑:构建是 debug/x86,我不记得 STL 容器(不在家),但可能是 map
。
最佳答案
只需执行如下操作:char* p = new char[100];删除[] p;
并设置一个断点,看看会发生什么。
关于C++/Windows : Replacing global new works, new[] 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507973/