[英]Order of members, order of derivation matters?
有时我碰到过这个问题,每当我更改成员的顺序,C ++类中的派生顺序时,问题都会得到解决,崩溃会得到解决。
最近,我将私有成员变量的位置从班级的较低位置移到了班级顶部,并且错误已得到解决。
还有一次我有A类:公共B,公共C。当我将其更改为A类:公共C,公共B时,崩溃代码开始起作用。 C是包含虚拟方法的类,在前一种情况下,类A找不到C中重写的方法,但在后来的情况下,它可以找到。 这是由于虚拟指针损坏吗? 如果是这样,那与会员顺序有什么关系? 我知道更改成员顺序时内存布局会发生变化,但是我们如何调试此类问题,因为在VS2008中我找不到任何有关崩溃发生原因的指示?
注意:基类B和C完全独立,彼此之间没有依赖关系
基类和成员对象按声明顺序(而不是初始化列表的顺序)初始化。
如果其中一个基址接收到指向另一个基址对象的指针,并且除了将指针存储以供以后在其构造函数中使用外,其他任何操作,那么ctor将访问尚未构造的对象。
在MSVC / VS下使用/W3
警告级别,应在this
其传递到指向尚未初始化的对象的一部分的基本ctor以及将初始值设定项列表改组以匹配声明顺序时发出警告。
可能性:
调试步骤:
可能是您定义了一个数组:int A [M]。 M小于您在代码中使用的M。 我今天也有这个麻烦。 我定义了布尔mMyArray [6];
但是,在我的代码中,我在某处使用了mMyArray [7] = false;。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.