我有一个与某些 DLL(或 .so)链接的测试应用程序。在我的主应用程序中,我定义了一个全局的新建/删除,如下所示:
void* operator new(size_t n)
{
....
}
void operator delete(void* p)
{
...
}
但我注意到运算符仅针对我在主应用程序中分配的内容调用,但如果其中一个 DLL 调用则不会调用。
如何通过我的运算符新建/删除在 DLL 中进行分配? (这还应该包括 STL 分配的内存,所以如果其中一个 DLL 有一个 std::string,我希望在 STL 分配它的 std::string 内部缓冲区时调用我的 operator new)。
我对 Windows 解决方案更感兴趣,但 Linux 解决方案也将不胜感激。
编辑:也许我最初并不清楚,我正在做的这个测试应用程序是为了跟踪 DLL 中定义的几个自动生成的类的内存使用情况。创建我自己的分配器并在生成的代码 STL 结构中使用它不是一种选择,更何况还有其他非 STL 分配。但是看到答案后,我认为最好的选择是使用分析器或使用 perfmon 简单地监视内存使用情况。
最佳答案
I'd like my operator new to be called when STL allocates its std::string internal buffer
typedef std::basic_string<char, std::char_traits<char>, ALLOCATOR> mystring;
DLL 中的代码已经使用了自己的 new
实现,并且没有充分的理由定义您自己的实现应该神奇地更改 DLL 使用的实现(如果它们使用自己的自定义实现怎么办?)。
因此,如果您希望字符串使用您的分配器,则需要显式地创建它们。
关于c++ - 如何使我的依赖项调用我的全局运算符 new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062173/