c++ - vtable 存储在内存的哪个位置?

标签 c++ vtable

vtable 存放在内存的什么地方?

最佳答案

取决于编译器。

在 VC++ 中,vtable 指针存储在对象分配的开始,在任何成员数据之前。 (前提是你的类至少有一个虚拟成员函数。)

如果您的类使用 vtables 从其他类乘以继承,也可能有多个 vtable 指针。

vtables 本身静态分配在您的地址空间中的某个位置。

那么对象布局看起来像(对于 C 的一个实例):

A's VTable ptr
A's member variables.
B's Vtable ptr
B's member variables.
C's member variables.

为了类(Class)

class A {
  virtual Ax() {}
  int a, b;
};
class B {
  virtual Bx() {}
  int c, d;
};
class C : public A, public B {
  int foo, bar;
};

关于c++ - vtable 存储在内存的哪个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1905237/

相关文章:

c++ - 未定义对 vtable 的引用... Q_OBJECT 宏

c++ - "competitive programming 1"的凸包代码

c++ - 将 _int64 转换为字符串

java - Java 中的 BufferedReader 和 InputStreamReader

C++ gcc `floorf` 不是 `std` 的成员?

c++ - 对基类的`vtable 的 undefined reference

c++ - 编译器是否优化了虚拟调用?

c++ - 解密 .ini,并使用值?

c++ - GCC:对未使用的函数的奇怪未解决引用

c++ - 为什么 C++ 继承机制不透明?