フレームワークにテンプレート クラスがあり、デバッグ モードで検査したときに変数の無効/破損/bad_ptr 値を報告し始めました。ただし、コンソールに出力すると、変数は正しく表示されます。
この状況の発生には、次の 4 つの要因が重要であることがわかりました。
- /MDd ランタイム ライブラリを使用したビルトイン デバッグ (/MTd は影響を受けないようです)
- すべて再構築後に実行
- #define _HAS_ITERATOR_DEBUGGING 0 マクロの組み込み
- コンストラクターの ifstream オブジェクト
次の例では、コンストラクター引数 str は、検査時に破損/無効/bad_ptr に見えるはずですが、コンソールに正しく出力されます。上記の要因のいずれかを取り除くと、問題が修正されます。
#define _HAS_ITERATOR_DEBUGGING 0
#include <iostream>
#include <string>
#include <fstream>
template <class T>
class Foo
{
public:
Foo(std::string str)
{
std::cout << str << std::endl;
std::ifstream in;
}
};
int main()
{
Foo<int> MyFoo("Hello World");
return 0;
}
私の質問は、これは単に VS2010 のバグですか、それとも私がやっていることがこれを引き起こしているのでしょうか?