成员的顺序,派生的顺序事项?

时间:2012-01-10 10:29:17

标签: c++

有时我遇到过这个问题,每当我改变成员的顺序时,我的C ++类中的派生顺序问题就会得到解决,崩溃就会得到解决。

最近我将私有成员变量的位置从较低位置移到了我的班级顶部并且错误得到修复

另一次我有一个A级:公共B,公共C.我把这个改成了 A类:public C,public B崩溃代码开始工作。 C是包含虚方法的类 在前一种情况下,A类没有在C中找到方法覆盖,但在后来它能够找到。这是由于虚拟指针损坏吗?如果是这样,它与订单有什么关系 会员?我知道当我们改变成员的顺序时内存布局会发生变化,但是我们如何调试这类问题,因为在VS2008中我找不到任何关于崩溃发生原因的指示?

注意:基类B和C完全独立,彼此之间没有依赖性

3 个答案:

答案 0 :(得分:4)

基类和成员对象按声明顺序初始化,而不是初始化列表的顺序。

如果其中一个基地接收到指向另一个基础对象的指针,并且只做存储指针以供以后在其构造函数中使用,则ctor将访问尚未构造的对象。

在MSVC / VS下使用/W3警告级别时,如果this传递给指向尚未初始化的对象的一部分的基本ctor,并且初始化列表为洗牌以符合声明顺序。

答案 1 :(得分:1)

的可能性:

  • 您没有重新编译所有您的来源,因此您的标题不同步;
  • 你的某些史诗未定义的行为会破坏一切。

调试步骤:

  • 运行静态分析工具
  • 在调试模式下完全重建
  • 运行调试程序
  • 运行动态分析工具

答案 2 :(得分:0)

可能是你定义了一个数组:int A [M]。 M小于您在代码中使用的。 我今天也有这个麻烦。 我定义了 bool mMyArray [6];

然而,在我的代码中,我使用的地方是mMyArray [7] = false;