Base Copy constructor not called
c++, inheritance
Solution
If you want to read actual rule you should refer to C++ Standard 12.8/8:
The implicitly-defined copy constructor for class X performs a memberwise copy of its subobjects. The order of copying is the same as the order of initialization of bases and members in a user-defined construc- tor (see 12.6.2). Each subobject is copied in the manner appropriate to its type:
- if the subobject is of class type, the copy constructor for the class is used;
- if the subobject is an array, each element is copied, in the manner appropriate to the element type;
- if the subobject is of scalar type, the built-in assignment operator is used.
When you define copy constructor explicitly you should call copy c-tor of base class explicitly.
Problem
``` class Base { public: int i; Base() { cout<<"Base Constructor"<<endl; } Base (Base& b) { cout<<"Base Copy Constructor"<<endl; i = b.i; } ~Base() { cout<<"Base Destructor"<<endl; } void val() { cout<<"i: "<< i<<endl; } }; class Derived: public Base { public: int i; Derived() { Base::i = 5; cout<<"Derived Constructor"<<endl; } /*Derived (Derived& d) { cout<<"Derived copy Constructor"<<endl; i = d.i; }*/ ~Derived() { cout<<"Derived Destructor"<<endl; } void val() { cout<<"i: "<< i<<endl; Base::val(); } }; ``` If i do Derived d1; Derived d2 = d1; The copy constructor of base is called and default copy constructor of derived is called. But if i remove the comments from derived's copy constructor the base copy constructor is not called. Is there any specific reason for this? Thanks in advance.