如何解决为什么 C++ 实例的类属性有两个不同的值?
在我当前的 C++ 项目中,我遇到了一些我以前从未见过的奇怪的事情。这是演示效果的最小示例。我有两个几乎空的虚拟班级 B1、B2。
class B1 {
public:
virtual void Func1() = 0;
}
class B2 {
public:
virtual void Func2() = 0;
}
... 和一个继承自它们的类 A。 A 具有单例行为,并由设置 A 的数据属性的静态初始值设定项构造:
class A : public B1,public B2 {
public:
virtual void Func1() {}
virtual void Func2() {}
static A* Initialize(const double dataIn) {
Instance.data = dataIn;
return &Instance;
}
double data;
protected:
static A Instance;
}
如您所见,B1 和 B2 是可以互换的,除了 A 继承的声明顺序。我现在调用两个函数 Func1 和 Func2,第一个表现正常,第二个在调试过程中表现出“奇怪”的行为(解释如下)
int main() {
A* a = A::initialize(5);
a->Func1(); // Behaves normally
a->Func2(); // Weird behavior with this->data if you debug within Func2
}
在函数运行期间在 Debug 中停止并分析调用对象时会出现奇怪的行为:
设置数据字段显示了两个不同的值,一个位于“this”下方的无意义值,以及“this”的 [A] 方面下方的正确值。调用 Func1() 时不会发生此行为。 B1和B2之间的继承顺序显然在这里发生了一些事情,但老实说我不知道。希望这里有人能解释一下:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。