莫非hash_map不允许使用带临界区的对象么?还是一旦初始化了临界区的对象就不允许复制了??
#include "stdafx.h"
#include <windows.h>
#include <hash_map>
#include <string>using   namespace   std;
using namespace stdext;class CTest
{
public:
CTest()
{
memset(&m_sec, 0, sizeof(CRITICAL_SECTION));
InitializeCriticalSection(&m_sec);
}
virtual ~CTest()
{
DeleteCriticalSection(&m_sec);
}protected:
CRITICAL_SECTION m_sec;
};int _tmain(int argc, _TCHAR* argv[])
{ hash_map<std::string,CTest> m_test;
CTest objPingTest; m_test["test"] = objPingTest;
return 0;
}

解决方案 »

  1.   

     m_test["test"] = objPingTest;
    这一行,hasp_map不仅仅产生了一个CTest对象,它可能产生好几个临时对象。换句话说可能会多次构造后,再多次析构。
    还有你最好写个copy构造函数,避免m_sec的直接复制。
      

  2.   

    谢谢2楼老兄,不过临界锁肯定不能COPY哦,而且如果用拷贝构造的话旧对象的释放必将造成新对象某些指针访问异常
      

  3.   

    所以这个对象不允许加入map,你加入map后,临界区对象不可避免的被多次拷贝