问题描述
对 C++ 不是很熟悉,所以对于这个潜在的菜鸟问题深表歉意(尽管我找不到这个问题的答案,尽管有半相似的问题)。
在我正在处理的代码库中(抱歉,无法共享确切的代码),有一个 Base 类和一个派生类。我有一个指向派生类 results
的指针。
在某些时候,我设置了
d
非常奇怪的是,指针最终会得到不同的值! Base* b = d;
最终得到的地址正好比 b
大 8。
我无法用直接的 Base/Derived 类重现这一点,所以我确信在我正在使用的特定类中做了一些事情。
谁能解释一下这怎么可能? C++ 中的什么可能允许这样的事情?
提前致谢!
解决方法
超级奇怪的是,指针最终具有不同的值!
这其实很正常。 b
是指向基础子对象的指针。不能保证基础子对象存储在封闭派生对象的开头。事实上,如果类具有虚函数,则通常不是,因为语言实现通常将虚指针存储在那里(虚指针是 C++ 程序员几乎不需要真正了解的实现细节)。
还要考虑多重继承。如果有多个非空基,那么肯定不能都存储在同一个地址。
,我不确定您的问题,但基本上,指针用于指向/存储分配给指针变量的变量的地址。要检查指针值,请使用 *b、b、&b 来检查值、存储在指针中的地址,而确切的 8 位可能是派生类的地址