我的框架中有一个模板类,当在调试模式下检查时,它开始报告变量的无效/损坏/bad_ptr 值。然而,这些变量在打印到控制台时看起来是正确的。
我发现有四个因素对这种情况的发生至关重要:
- 使用 /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 错误还是我正在做的事情导致了这个?