C++:将派生 class 指针分配给基 class 指针
C++: Assigning derived class pointer to base class pointer
对 C++ 不是很熟悉,所以对这个可能很笨的问题表示歉意(虽然,尽管有半相似的问题,但我找不到答案)。
在我正在处理的代码库中(抱歉,无法分享确切的代码),有一个 Base class 和一个 Derived class。我有一个指向派生的 class、d
.
的指针
在某些时候,我设置
Base* b = d;
超级奇怪的是,指针最终有不同的值! b
最终得到的地址正好比 d
大 8。
我无法直接 Base/Derived class 重现这一点,所以我确信在我正在使用的特定 classes 中已经完成了一些工作.
任何人都可以阐明这是怎么可能的吗? C++ 中的什么可能允许这样的事情?
提前致谢!
我不确定你的问题,但基本上,指针用于 point/store 指向分配给指针变量的变量地址。要检查指针值,请使用 *b、b、&b 来检查指针中存储的值、地址,而确切的 8 可能是由于派生的地址 class
What's super weird is that the pointers end up with different values!
这其实很正常。 b
是指向基础子对象的指针。不能保证基础子对象存储在封闭派生对象的开头。事实上,如果 class 具有虚函数,则通常不会,因为语言实现通常将虚拟指针存储在那里(虚拟指针是 C++ 程序员几乎不需要真正了解的实现细节)。
还要考虑多重继承。如果有多个非空基数,那么肯定不能都存储在同一个地址。
对 C++ 不是很熟悉,所以对这个可能很笨的问题表示歉意(虽然,尽管有半相似的问题,但我找不到答案)。
在我正在处理的代码库中(抱歉,无法分享确切的代码),有一个 Base class 和一个 Derived class。我有一个指向派生的 class、d
.
在某些时候,我设置
Base* b = d;
超级奇怪的是,指针最终有不同的值! b
最终得到的地址正好比 d
大 8。
我无法直接 Base/Derived class 重现这一点,所以我确信在我正在使用的特定 classes 中已经完成了一些工作.
任何人都可以阐明这是怎么可能的吗? C++ 中的什么可能允许这样的事情?
提前致谢!
我不确定你的问题,但基本上,指针用于 point/store 指向分配给指针变量的变量地址。要检查指针值,请使用 *b、b、&b 来检查指针中存储的值、地址,而确切的 8 可能是由于派生的地址 class
What's super weird is that the pointers end up with different values!
这其实很正常。 b
是指向基础子对象的指针。不能保证基础子对象存储在封闭派生对象的开头。事实上,如果 class 具有虚函数,则通常不会,因为语言实现通常将虚拟指针存储在那里(虚拟指针是 C++ 程序员几乎不需要真正了解的实现细节)。
还要考虑多重继承。如果有多个非空基数,那么肯定不能都存储在同一个地址。