DLL new / delete是否覆盖用户代码new / delete?

时间:2011-04-27 09:33:26

标签: c++ visual-c++

人, 如果我在我的dll代码中覆盖全局new并删除,那么这会覆盖用户代码new并删除吗? 我做了一个测试,它显示用户new和delete不会受到影响。 如果我想让用户代码为new并删除被我的sdk new / delete替换,该怎么做。

模板类是什么情况。模板类定义包括一些新的/删除。用户代码可以实例化它。然后,它可能会使用用户new / delete,对吗?

4 个答案:

答案 0 :(得分:6)

不,在Windows上,每个DLL都有自己的operator new() / operator delete()。但是你应该小心 - 如果某个DLL new是一个对象应该delete使用相同的operator delete() - 否则你会遇到未定义的行为。

答案 1 :(得分:0)

除非您在用户代码中声明了新的/删除功能,否则不会这样做。

答案 2 :(得分:0)

  

如果我想将用户代码设为new并将删除替换为我的sdk new / delete,那该怎么做。

根据您的需要,在全局范围或类范围(new)中重载deleteof the user code运算符。

只需在您自己的dll中重载newdelete,就不会重载用户代码版本。它们必须在自己的范围内特定地超载。

答案 3 :(得分:0)

一种方法是在加载DLL时让DLL将API挂钩应用于EXE。然后每当EXE调用其中一个内存分配函数(例如HeapAlloc)时,它就会转移到您的代码中。有一些内存分配API,所以全部获取它们,或者只获取新的/删除操作符使用的那些(最有可能是HeapAlloc / HeapFree)。

也许不是正统,但如果你想做你说的话......这是一种方式。如果您可以访问EXE和DLL的源代码,那么可能有更好的解决方案。