首页 > 代码库 > 浅析常用STL中容器插入数据失败
浅析常用STL中容器插入数据失败
昨天在上班的时候,碰到一个问题,关于 STL常用容器插入数据失败。
问题详细:在一个类构造函数填零后,那么map list 插入数据失败了,但是vector不会。测试代码如下:
class Test{public: Test(){memset(this,0,sizeof(*this));} void InsertElement(){m_map.insert(std::make_pair(1,1)); } void InsetElement_vector(){ m_vector.push_back(1);} void InserElementList(){m_list.push_front(1);}private: std::map<int,int> m_map; std::vector<int> m_vector; std::list<int> m_list;};int _tmain(int argc, _TCHAR* argv[]){ Test p ; p.InsertElement(); p.InsetElement_vector(); p.InserElementList(); return 0;}
其中 vecotr 成功,其余两个容器失败。~开始百思不得其解,估计着是 容器有特殊隐藏的数据结构,填0破坏了 容器的数据结构。。。。
后来请教诸神,总结答案如下:
非 pod 类型不要memset()初始化,会导致未定义行为,实际上就是破坏数据完整性。
关于POD类,相信有一部分人有点想不起它的定义,关于它的定义用简单的描述如:一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。
浅析常用STL中容器插入数据失败
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。