人, 如果我在我的dll代码中覆盖全局new并删除,那么这会覆盖用户代码new并删除吗? 我做了一个测试,它显示用户new和delete不会受到影响。 如果我想让用户代码为new并删除被我的sdk new / delete替换,该怎么做。
模板类是什么情况。模板类定义包括一些新的/删除。用户代码可以实例化它。然后,它可能会使用用户new / delete,对吗?
答案 0 :(得分:6)
不,在Windows上,每个DLL都有自己的operator new()
/ operator delete()
。但是你应该小心 - 如果某个DLL new
是一个对象应该delete
使用相同的operator delete()
- 否则你会遇到未定义的行为。
答案 1 :(得分:0)
除非您在用户代码中声明了新的/删除功能,否则不会这样做。
答案 2 :(得分:0)
如果我想将用户代码设为new并将删除替换为我的sdk new / delete,那该怎么做。
根据您的需要,在全局范围或类范围(new
)中重载delete
和of the user code
运算符。
只需在您自己的dll中重载new
和delete
,就不会重载用户代码版本。它们必须在自己的范围内特定地超载。
答案 3 :(得分:0)
一种方法是在加载DLL时让DLL将API挂钩应用于EXE。然后每当EXE调用其中一个内存分配函数(例如HeapAlloc)时,它就会转移到您的代码中。有一些内存分配API,所以全部获取它们,或者只获取新的/删除操作符使用的那些(最有可能是HeapAlloc / HeapFree)。
也许不是正统,但如果你想做你说的话......这是一种方式。如果您可以访问EXE和DLL的源代码,那么可能有更好的解决方案。