c++ - 成员顺序,派生顺序重要吗?

标签 c++

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

最近我将一个私有(private)成员变量的位置从较低的位置移动到我的类的顶部并且错误得到修复

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

注意:基类B和C完全独立,互不依赖

最佳答案

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

如果其中一个基类接收到指向另一个基类对象的指针,并且除了存储指针供以后在其构造函数中使用之外做任何事情,那么 ctor 将访问一个尚未构造的对象。

在 MSVC/VS 下使用 /W3 警告级别应该在将 this 传递给指向尚未初始化的对象的一部分的基本构造函数时发出警告,以及当初始化列表被打乱以匹配声明顺序时。

关于c++ - 成员顺序,派生顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8801784/

相关文章:

c++ - 运算符重载 分数

c++ - 使用另一个 C 文件中的 switch case 调用方法?

c++ - 为什么 glDrawElements 不渲染我的三角形?

c++ - 这个 C++ 列表有什么问题?

C++ #if#elif#endif 似乎不起作用

c++ - Websocketpp 设置消息处理程序

c++ - 从 C 样式数组到 std::array 的转换对于数组来说是完全安全的吗?

c++ - 用C++编译gpsd客户端

c++ - 如何使用 shared_ptr 在类型删除类中显示基础数据

c++ - 回调非静态 C++ 成员函数