📜  在C++中,默认构造函数的主体是否为空白?

📅  最后修改于: 2021-05-30 04:15:45             🧑  作者: Mango

该问题的答案取决于以下两种情况:

  • 方案1:当程序中有虚拟函数时:在这种情况下,编译器会自动创建虚拟表(称为V-Table )和VVPTR(虚拟Void指针) 。 V-Table包含虚拟方法调用,而VVPTR包含V-Table中存在的虚拟方法的地址,因此VVPTR指向V-Table的方法。

    编译器采取以下步骤来初始化VVPTR:-

    1. 当编译器指示代码中使用了虚函数时,它将创建V表和VVPTR。
    2. 现在要初始化VVPTR编译器,生成7行代码,每当编译器知道要使用虚函数时,该行代码都应运行
    3. 因此,编译器会将这7行代码复制到构造函数中,以便在执行对象VVPTR之后立即对其进行初始化,以便可以指向V-Table。
    4. 现在,如果未明确定义构造函数,则它将在默认构造函数(由编译器自己创建)中复制这7行代码。
    5. 现在,它将调用虚拟方法。

    因此,可以清楚地看出,当代码包含虚函数时,Default Constructor的主体不为空

  • 方案2:当程序中没有虚拟函数时:在这种情况下,编译器不会创建任何V表或VVPTR。因此,默认构造函数将为空。

    结论:如果程序包含虚函数,则默认构造函数的主体不为空,如果不包含,则默认构造函数的主体为空

    要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”