Visual C++ 新手在这里。(我在很久以前就开始使用 Visual C++ 6,从那时起偶尔使用 IDE,但仍然觉得不舒服。给我一个好的旧命令行并离开我的草坪,这就是我的态度。)
我正在帮助一个使用 Visual C++ 2010 构建的应用程序(它是一个包含 20 个子项目的解决方案文件),并注意到一些奇怪的事情:即使 _ITERATOR_DEBUG_LEVEL 和 _SECURE_SCL 在项目的属性中都定义为零,为其中一个添加 /FAs .cpp 文件仍然显示对检查过的迭代器的调用,例如
call DWORD PTR __imp_?_Orphan_all@_Container_base0@std@@QAEXXZ
我已经验证(使用 printf)这两个定义都为零。此外,这些调用似乎非常脆弱。如果我从所涉及的函数中删除看似微不足道的代码量,对 Orphan_all 的调用就会消失。
那么:为什么在使用 _ITERATOR_DEBUG_LEVEL=0 销毁向量时,Visual C++ 2010 仍然调用 Orphan_all ?(另外,我也听说windows sdk v7.1和一些游戏中的cl.exe本身似乎都从msvcp100.dll导入_Orphan_all@_Container_base0@std@@QAEXXZ,这对于发布的产品来说似乎很奇怪。msvcp100应该怎么做? .dll 的 _Orphan_all@_Container_base0@std@@QAEXXZ 可以做——它是无操作的,还是它实际上做的事情,比如 msvcp100d.dll 中的那个?)