Visual C++ の初心者です。(私は Visual C++ 6 に少し前に精通し、それ以来散発的に IDE を使用してきましたが、まだ使い慣れていません。古き良きコマンドラインを与えて、芝生から降りてください。それが私の態度です。)
私は Visual C++ 2010 でビルドされたアプリ (20 のサブプロジェクトを含むソリューション ファイル) を手伝っていますが、奇妙なことに気付きました: プロジェクトのプロパティで _ITERATOR_DEBUG_LEVEL と _SECURE_SCL の両方がゼロに定義されていて、いずれかのプロパティに /FA が追加されているにもかかわらず、 .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 をインポートしているように見えると聞いています。これは、リリースされた製品では奇妙に思えます。 .dll の _Orphan_all@_Container_base0@std@@QAEXXZ do -- これはノーオペレーションですか、それとも実際に msvcp100d.dll のようなことをしますか?)