纯虚拟对象是否有指向vtbl的指针?

时间:2010-10-02 20:31:22

标签: c++ virtual

纯虚拟对象是否有指向vtbl的指针? (这可能指向NULL?)

谢谢,我对所有的虚拟机制都有点困惑。

2 个答案:

答案 0 :(得分:3)

不要担心。虚拟表是一个实现细节,甚至不保证存在。你越担心如何做,你对实际语言的了解就越少。


那说,是的。然后,具体类将该指针设置为指向正确的虚拟表。

答案 1 :(得分:0)

技术上没有“纯虚拟对象”这样的东西。我假设你的意思是一个纯虚方法的对象?但你实际上不能创建这样一个对象,因为它是抽象的,编译器会抱怨。

话虽如此,在构造对象时,它在成为派生类的实例之前简要地是抽象类的一个实例。在这种情况下,它将为虚拟表设置它定义的功能。对于纯虚方法,它可能为NULL。如果您尝试调用程序将崩溃。

您可以通过在构造函数中调用虚方法来尝试此操作。如果调用基类中的方法,您会发现它们会调用基类版本。如果你调用纯虚方法它会崩溃。 (在某些情况下,编译器会弄清楚你在做什么并抱怨)。

带回家的是:

不要在构造函数中调用虚函数,它可能会让人感到困惑。事实上,在大多数情况下,最好是你的构造函数只是设置其内部状态而不做任何太复杂的事情。