场景:定义了一个结构体,包含一个vector的成员变量,在给这个vTQ push_back数据的时候报错。
typedef struct tag_TQInfo { int iTime; int iMarket; string sCode; vector<string> vTQ; tag_TQInfo() { memset(this, 0, sizeof(tag_TQInfo)); } }TQINFO,*LPTQINFO;
原因:
tag_TQInfo构造函数用了memset,将分给tag_TQInfo的那块内存都初始化了,也就把vector vTQ自带的东西都清零了,破坏了vector的结构,会导致之后vTQ使用出错。
vector定义变量时会自己完成初始化工作。
解决方法:
当结构体中包含vector、string等复杂数据类型,或包含自定义的结构时,构造函数初始化时不能使用memset。
typedef struct tag_TQInfo { int iTime; int iMarket; string sCode; vector<string> vTQ; tag_TQInfo() : iTime(0) , iMarket(0) { } }TQINFO,*LPTQINFO;