今天同事在写了如下结构体:
1 typedef struct _tagInfo 2 { 3 std::list<int> lst; 4 std::vector<int> nVec; 5 } INFO, *PINFO; 6 7 typedef std::map<int, INFO*> Map_Info; 8 typedef std::map<int, INFO*>::iterator Map_Info_It;
在使用该结构体时
PINFO pInfo = new INFO();
ZeroMemory(pInfo, sizeof(INFO));
pInfo->lst.push_back(1); //此处会出现崩溃,虚函数的指针已经被清零,因此程序运行到这里会引起崩溃!
原因是如下:
在windows平台下,数组或纯内置类型(int,char,bool,double,float等类型)结构使用ZeroMemory是安全的,而类(class)就使用构造函数进行初始化,不要调用ZeroMemory。