memset初始化字符串string崩溃原因分析:
环境:linux(win7下vs不会出现崩溃)
我喜欢先说结果,运行崩溃在 C1.m_Content = "aaaa":
struct ChatMsg { int m_nTargetGuid; std::string m_Content; ChatMsg() { memset(this, 0, sizeof(*this)); } }; int main() { ChatMsg C1; C1.m_Content = "aaaa"; return 0; }
原因分析:
首先需要了解String类内部构造,内部也是很复杂,有很多指针,当memset时都为0了,破坏了内部结构,使得内部指针都为0,调用赋值构造函数时会出啥乱子就不清楚了
具体想了解内部结构的参考帖子:https://www.cnblogs.com/findumars/p/5006181.html
总结:
memset不可初始化string类,当然最好不要初始化模板类,拥有虚函数表的类等等