Closed. This question is not reproducible or was caused by typos。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
7年前关闭。
Improve this question
这是vtables上的程序。我是否了解在vtable和v指针上是正确的。
我认为将有两个vtable和一个vptr。我正确吗?
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
7年前关闭。
Improve this question
这是vtables上的程序。我是否了解在vtable和v指针上是正确的。
Class B
{
public:
virtual Void Hello()
{
cout<<"Hello Base";
}
};
class D: public B
{
public:
virtual void Hello()
{
cout<<"Hello Derived";
}
};
int main(int argc, char* argv[])
{
D *d1 = new D();
D *d2 = new D();
D *d3 = new D();
return 0;
}
我认为将有两个vtable和一个vptr。我正确吗?
最佳答案
该标准并未定义虚拟函数的实际实现方式,仅定义了其行为方式。因此,您所要求的完全取决于您使用的编译器。
理论上,GCC最有可能创建两个vtable(一个用于B
,一个用于D
)和三个vptrs(一个用于每个对象实例d1
,d2
和d3
)。
在这里看看:http://en.wikipedia.org/wiki/Virtual_method_table
10-04 10:16