C++/Windows : Replacing global new works, new[] 没有

标签 c++ windows overriding new-operator

我刚开始尝试覆盖全局新建/删除(纯粹出于教育目的)并且遇到了问题。

我正在使用我的一个相当成熟的项目来测试几 k loc。我做的第一件事是覆盖 newnew[] 以简单地使用 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/

相关文章:

Java 抽象类和覆盖变量

c# - 从 C# 到非托管 C++ 库中执行 DllImport 时出现 MSBuild 4.0 依赖性问题

c++ - clang 错误中的完整代码路径

javascript - 在框架上注入(inject) javascript

c++ - 如何对C++中一个函数的所有重载进行 "export"?

windows - Windows 10 上的 Docker : How to move existing containers & images to new location?

c++ - 从相关类访问私有(private)成员数据

c++ - OSX 10.8 上 C++ 中列表内存泄漏的 vector

windows - 如何创建 .BAT 文件以下载和解压缩 zip 文件?

python - 通过 Python winreg 在注册表中设置 Windows 系统 PATH