【发布时间】:2016-10-14 03:00:18
【问题描述】:
在调试版本中使用其泄漏检查工具时,Microsoft 有一个几十年前的错误。当使用 C++ 类型信息(如 typeinfo.name())时,运行时库进行的分配会报告泄漏。另请参阅 Microsoft Connect 上的 Memory leaks reported by debug CRT inside typeinfo.name()。
由于泄漏,我们收到错误报告和用户列表讨论的时间大致相同。微软的漏洞还可以掩盖用户程序的真实泄漏。后一点对我来说尤其令人担忧,因为我们可能不会因为掩蔽而倾向于真正的问题。
我想尝试消除由于使用typeid(T) 和typeinfo.name() 而导致的泄漏。我的问题是,我们如何才能解决微软的错误?有解决办法吗?
【问题讨论】:
-
不要使用
typeinfo.name()? -
谢谢山姆。我在licensing the source code 上找不到任何信息。你有链接吗?此外,在这种情况下修复如何工作?是否希望所有用户都获得许可?或者我们是否通过
.localDLL 重定向的并行链接进行许可和分发?后者似乎不是一个可行的选择,但我想确保我理解这个过程。 -
建议:重新访问您正在使用的所有地方
typeinfo.name()并将调用替换为将调用定向到某些 Meyer 的单例函数或模板之类的东西 - 至少,会有有限数量的 '静态变量泄漏。 -
谢谢阿德里安。这对我们来说并不容易。我们基本上有调用
typeid(T)的序列化代码,并执行if (valueType == typeid(int))之类的操作。它仅限于两个或三个源文件,但它经常以不同的类型调用。如果我正确解析了建议,我们会将泄漏移到 Singleton 中。 -
@jww “如果我正确解析了建议,我们会将泄漏移到单例中。” 是的,这是我的建议。您要求解决方法。
标签: c++ visual-studio visual-c++ memory-leaks typeinfo