Это продолжение-вопроса к этому .
Рассмотрим этот пример.:
#include
class A
{
};
class B : public A
{
public:
int i;
virtual void Func() = 0;
};
class C : public B
{
public:
char c;
void Func() {}
};
int main()
{
C* pC = new C;
A* pA = (A*)pC;
std::cout << "pC == " << std::hex << pC << "\n";
std::cout << "pA == " << std::hex << pA << "\n";
return 0;
}
В Visual Studio 2010 вывод (на моей машине):
pC == 002DEF90 pA == 002DEF94
(объясняется принятым ответом на вопрос ).
С g++ вывод будет:
pC == 0x96c8008 pA == 0x96c8008
Итак, вопрос в том, как реализация g++ обрабатывает этот случай? Что делает адреса одинаковыми, когда C
должен иметь виртуальную таблицу? (Я знаю, что это деталь реализации, не говорите, что :)я интересуюсь этой деталью реализации из любопытства).