偶然发现的一个问题,VS版本为2013
static std::list<int> s_list;
void TestIteratorDestructTiming(){
s_list.push_back(0);
DWORD64 dwStartTick = GetTickCount64();
struct tagStruct
{
std::list<int>::const_iterator citr;
tagStruct()
{
citr = s_list.begin();
}
};
std::vector<tagStruct> container;
container.resize(10000000);
std::cout << "Resize Timing Ticks:" << GetTickCount64() - dwStartTick << std::endl;
dwStartTick = GetTickCount64();
container.clear();
std::cout << "Clear Timing Ticks:" << GetTickCount64() - dwStartTick << std::endl;
}
RELEASE 模式下,运行结果
Resize Timing Ticks:16
Clear Timing Ticks:0
DEBUG 模式下,运行结果
Resize Timing Ticks:6968
然后一直卡在 container.clear();
VC 的DEBUG模式下 STL 启用_ITERATOR_DEBUG_LEVEL=1,这个有bug 析构的时候会做无用的循环检测 次数貌似是随机未初始化的,接近死循环
可在工程设置里定义 _ITERATOR_DEBUG_LEVEL=0 屏蔽检测