A little question about creating objects. Say I have these two classes:
struct A{
A(){cout << "A() C-tor" << endl;}
~A(){cout << "~A() D-tor" << endl;}
};
struct B : public A{
B(){cout << "B() C-tor" << endl;}
~B(){cout << "~B() D-tor" << endl;}
A a;
};
and in main I create an instance of B:
int main(){
B b;
}
Note that B derives from A and also has a field of type A.
I am trying to figure out the rules. I know that when constructing an object first calls its parent constructor, and vice versa when destructing.
What about fields (A a; in this case)? When B is created, when will it call A‘s constructor? I haven’t defined an initialization list, is there some kind of a default list? And if there’s no default list? And the same question about destructing.
class. If there are multiple baseclasses then, construction starts with the left most base. (side note: If there is avirtualinheritance then it’s given higher preference).order they are declared
classitself is constructedIrrespective of the initializer list, the call order will be like this:
class A‘s constructorclass B‘s field nameda(of typeclass A) will be constructedclass B‘s constructor