vtable이 실제로 어떻게 빌드되었는지 알아보기로 결심했습니다. 그래서 디버거를 열었고 이상한 것을 발견했습니다. 노드 ptr에는 몇 개의 vptr이 있습니다. 나는 항상 객체 당 하나의 vptr 만 있다고 생각했다. 아무도 나에게 여기에 무슨 일이 일어 났는지 설명 할 수 있니?가상 테이블 포인터
#include <iostream>
using namespace std;
class Base
{
int base;
public:
virtual void say()
{
cout << "Hello" << endl;
}
virtual void no()
{
cout << "No" << endl;
}
};
class Base2
{
public:
virtual void lol()
{
cout << "lol" << endl;
}
};
class Derv:public Base,public Base2
{
public:
void say()
{
cout << "yep" << endl;
}
};
int main()
{
Base* ptr = new Derv();
ptr->say();
ptr = new Base();
ptr->say();
}
http://s018.radikal.ru/i504/1405/1e/38832e978dd5.jpg
"노드 ptr에 몇 개의 vptr이 포함되어 있습니다."라는 의미를 이해할 수 없습니다. 당신은 당신이 당신이 설명하기를 바라는 것을 정확히 보여줄 수 있습니까? –
'Base'용 vtable과 'Base2'용 vtable. 컴파일러는 가상 테이블을 구현하는 방법을 선택할 수 있습니다. vtables의 구조가 모든 플랫폼에서 동일 할 것으로 예상 할 수 있다고 생각하지 않습니다. –
[link] (http://s018.radikal.ru/i504/1405/1e/38832e978dd5.jpg) – GamovCoder