C ++ VS:' new'并且'删除'在多DLL解决方案中覆盖

时间:2018-02-08 10:16:49

标签: c++ visual-studio dll

我有一个大型解决方案,每个项目都会生成一个dll。在其中一个我已经把新的'并且'删除'覆盖,但看起来,它们并没有覆盖其他dll中的标准分配器。这是正常的吗?那些关于dll的覆盖是否是本地的?

作为一种解决方案,我可以编写包装函数 - 分配器 - ' my_new'和my_delete',它将以我想要的任何方式工作,并使用它们而不是' new' /'删除'。但是我想知道,当地dll之外的覆盖会发生什么。

感谢)

1 个答案:

答案 0 :(得分:1)

在单个DLL中使用时,覆盖是本地的和安全的。毕竟它们是独立的可执行文件。但是,当DLL中创建的带有重载的对象被传递给另一个DLL中定义的函数时,您可能遇到这种情况,最终它会通过标准运算符delete被销毁。 (它也适用于相反的方向。)这将导致未定义的行为,通常是崩溃。

毕竟,为Windows编程时的一般规则是通过同一DLL中的代码创建和销毁对象。因此,为了安全起见,您应该验证所有DLL都遵守此规则。