The answer to this question depends upon 2 scenarios:
- Scenario 1: When there is a Virtual function in the program: In this scenario, compiler automatically creates virtual table(known as V-Table) and VVPTR(Virtual Void Pointer). V-Table contains the virtual method calls whereas VVPTR contain the address of virtual methods which are present in V-Table, so VVPTR points to methods of V-Table.
The compiler takes the following steps to initialize VVPTR:-
- When compiler gets an indication that virtual functions are used in the code, it will create V-table and VVPTR.
- Now to initialise VVPTR compiler generate 7 lines of code which should run whenever compiler comes to know that virtual function is going to use
- So the compiler will copy this 7 lines of code inside the constructor, so that just after the execution of the object VVPTR should get initialised so that it can point to V-Table.
- Now if no constructor is defined explicitly, then it will copy this 7 lines of code inside default constructor(which compiler will create of it’s own).
- Now, it will call the virtual methods.
Therefore, this makes it clear that the body of Default Constructor is not blank when the code contains virtual functions.
- Scenario 2: When there is no Virtual function in the program: In this scenario, compiler doesn’t create any V-table or VVPTR. Hence the default constructor reamins empty.
Conclusion: If program contain virtual functions, then the body of default constructor is not blank and if not, then the body of default constructor is blank