我正在使用内存管理器监视我的内存消耗,它基本上跟踪所有全局新/删除分配/解除分配。 我在幕后编写了一个File类,我的内存管理器总是报告错误,但只在RELEASE模式下(vs 2017)。我对此进行了调查,发现当在fstream对象上调用“open”时,它会在“locale0.cpp”中为静态对象分配一个_Fac_node:
__PURE_APPDOMAIN_GLOBAL static _Fac_node *_Fac_head = 0;
void __CLRCALL_OR_CDECL _Facet_Register(_Facet_base * _This)
{ // queue up lazy facet for destruction
_Fac_head = new _Fac_node(_Fac_head, _This);
}
任何人都可以向我解释这个吗? :d 当这个“_Fac_head”在Release-Mode中被销毁时,我无法弄明白。在调试模式中,在此文件中调用适当的解构函数并销毁此“_Fac_head”。
感谢任何建议:)
答案 0 :(得分:1)
很可能这是std :: facet的内部表示,它将被移交给std :: locale,因此这应该没有内存泄漏:
通常使用第二个参数f来调用重载7,它直接从new-expression获得:locale负责从自己的析构函数中调用匹配的删除。
来自http://en.cppreference.com/w/cpp/locale/locale/locale
您的静态分析工具很可能无法跟踪它。