![]() |
注意C++类元素初始化顺序的问题 - 可打印的版本 +- WeHack BBS (https://bbs.wehack.space) +-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html) +--- 版块: 程序设计讨论区 (https://bbs.wehack.space/forum-14.html) +--- 主题: 注意C++类元素初始化顺序的问题 (/thread-180.html) |
注意C++类元素初始化顺序的问题 - vimacs - 09-03-2020 以下代码编译可以通过,而且没有警告,但是运行时就segfault. 代码: #include <iostream> 原因是 Top 中 vec 在 mod 之后调构造函数初始化,而 mod 在初始化的时候修改了 vec. 同理,如果没有 vec 的话,t.getv() 得到的是 456 而不是 mod 初始化时设的 123. 但是今天我调一个类似的bug的时候,编译器没报警告,address sanitizer 也没查出错误,就是运行结果错误。直到用gdb调试发现,本来预期有数据的vec的大小变成了0,再仔细分析代码,才发现了问题。 |