DLL new/delete是否覆盖用户代码new/delete
Does DLL new/delete override the user code new/delete?
伙计们,如果我在dll代码中覆盖全局新建和删除,这会覆盖用户代码新建和删除吗?我做了一个测试,它显示新用户和删除用户不会受到影响。如果我想让用户代码变新,并用我的sdk new/delete替换删除,如何做到这一点。
模板类的情况如何。模板类定义包括一些新的/删除的。用户代码可能会实例化它。然后,它可能会使用user-new/delete,对吧?
否,在Windows上,每个DLL都有自己的operator new()
/operator delete()
。但是,您应该小心——如果某个DLL new
是一个对象,那么该对象应该是使用相同operator delete()
的delete
d——否则您会遇到未定义的行为。
除非在用户代码中声明了新的/delete函数,否则不会。
一种方法是让DLL在加载DLL时将API挂钩应用到EXE。然后,每当EXE调用其中一个内存分配函数(例如HeapAlloc(时,它就会被转移到您的代码中。有一些内存分配API,所以获取它们全部,或者只获取新的/delete运算符使用的任何一个(很可能是HeapAlloc/HeapFree(。
也许不是正统的,但如果你想照你说的做。。这是一种方式。如果你可以访问EXE和DLL的源代码,可能会有更好的解决方案。
如果我想让用户代码变新,并用我的sdk new/delete替换删除,如何做到这一点。
根据需要,在全局作用域或类作用域(of the user code
(中重载new
和delete
运算符。
在您自己的dll中重载new
和delete
不会重载用户代码版本。他们将不得不在自己的范围内被特殊地超载。
相关文章:
- g++用户定义的动态链接库上的全局new和delete运算符
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 为什么 std::vector 使用 std::分配器而不是运算符 new 和 delete?
- 重载 new 和 delete 会导致 valgrind 错误
- 基类指针:在哪里使用 new 和 delete
- C++:为什么可以在没有事先使用 new 的情况下在指向结构的指针上使用 delete?
- 重载运算符 new 和运算符 delete 带有三个参数
- 如果我为一个类编写new和delete运算符,我是否必须编写它们的所有重载
- new[] / delete[] 并在C++中抛出构造函数/析构函数
- QQuickView new-delete-type-mismatch
- 使用重载的 new 和 delete 运算符跟踪已用内存
- 创建 myNew/myDelete 以替换 new/new[]/delete/delete[]
- 为多线程环境包装 c++ new/delete 的安全/好方法
- C++ VS:多 DLL 解决方案中的'new'和'delete'覆盖
- 如何使用 new 和 delete 与 OpenGL 的缓冲区对象一起使用?
- c++ 运算符 new[]/delete [] 是否调用运算符 new/delete?
- 继承类上的运算符new和delete.操作员删除未执行
- 在不同的编译器版本中调用new[]和delete[]
- `delete []`on`int*````new'''给出了malloc错误
- C++内存分配失败(使用 new & delete)