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

Does DLL new/delete override the user code new/delete?

本文关键字:delete new 代码 用户 是否 DLL 覆盖      更新时间:2023-10-16

伙计们,如果我在dll代码中覆盖全局新建和删除,这会覆盖用户代码新建和删除吗?我做了一个测试,它显示新用户和删除用户不会受到影响。如果我想让用户代码变新,并用我的sdk new/delete替换删除,如何做到这一点。

模板类的情况如何。模板类定义包括一些新的/删除的。用户代码可能会实例化它。然后,它可能会使用user-new/delete,对吧?

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

除非在用户代码中声明了新的/delete函数,否则不会。

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

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

如果我想让用户代码变新,并用我的sdk new/delete替换删除,如何做到这一点。

根据需要,在全局作用域或类作用域(of the user code(中重载newdelete运算符。

在您自己的dll中重载newdelete不会重载用户代码版本。他们将不得不在自己的范围内被特殊地超载。