0

我正在关注本教程,试图了解和背后的virtual table整个过程。pointervirtual functions in C++

不确定,当我有这样的代码时:

D1 d1;
Base *dPtr = &d1;
dPtr->function1();

为什么我需要所有这些virtual table管理?为什么编译器根本不分配d1(或基,如果没有的话)的内存地址覆盖virtual function

我的意思是:如果它需要 D1functon1()地址或Base functon1()地址,它可以在编译时详细说明。当时就知道了。为什么稍后在运行时浪费时间和资源virtual tables

我错过了这一点。花哨的例子?

4

1 回答 1

5

这是我的功能:

void foo(Base *pBase) {
  pBase->function1();
}

我单独编译它并给你一个带有标题的目标文件。几个月前你甚至梦想D1。编译器如何在这里“直接使用 D1 的 function1 的地址”

它不能。这就是为什么需要某种形式的间接性。

除此之外,在每个 C++ 实现都会使用一个虚函数表的意义上,它不是必需的。它只是当今编译器采用的最流行的实现技术。

于 2018-03-05T15:36:49.597 回答