有很多关于VTables的在线资源。它们通常有相同的声明:
“每当一个类本身包含虚函数或者重写父类的虚函数时,编译器会为该类构建一个vtable。这意味着并非所有类都由编译器创建vtable。vtable包含指向该类虚函数的函数指针。每个类只能有一个vtable,同一类的所有对象将共享相同的vtable。”
那么这究竟意味着什么,为什么不是所有类都由编译器创建vtable?是因为某些类没有虚函数吗?
“每当一个类本身包含虚函数或者重写父类的虚函数时,编译器会为该类构建一个vtable。这意味着并非所有类都由编译器创建vtable。vtable包含指向该类虚函数的函数指针。每个类只能有一个vtable,同一类的所有对象将共享相同的vtable。”
那么这究竟意味着什么,为什么不是所有类都由编译器创建vtable?是因为某些类没有虚函数吗?
extern "C"
,C++编译器必须已经支持没有虚函数表的结构体。最好只在需要时创建虚函数表以提高效率。 - MSalters