在C++中每个类都有虚函数表吗?
我知道虚表是用于多态的。具有虚函数的类必须有v-table。但是如果类没有虚函数呢?或者如果类没有基类呢?
发布于 2012-02-28 14:03:11
C++的语言规范没有定义什么是"vtable“,也没有定义哪些类需要vtable。
编译器中的C++的特定实现通常使用vtable来实现虚方法。如果一个类没有虚方法(也没有带虚方法的超类),那么编译器可能会省略vtable。但是,请记住,这纯粹是编译器实现的决定,并不是标准所要求的。
发布于 2012-02-28 14:02:43
作为一个非标准的经验法则(vtables不是由标准规定的),它实际上适用于所有编译器:
只有具有虚拟成员函数和/或虚拟析构函数的类才有vtable。其他类则不是。这符合C++中“按量计费”的一般规则。
当然,这让您承担了一项重要的责任:您的类是否要以多态方式删除?也就是说,它会被用作公共基类并通过它被删除吗?然后将析构函数设为虚拟的。
发布于 2012-02-28 14:04:08
C++语言本身并没有讨论如何实现虚函数,例如,它可以使用vtables或任何其他机制。话虽如此,它通常是使用v-table实现的,只有当类包含虚拟函数时才会创建这个v-table。
https://stackoverflow.com/questions/9477145
复制相似问题