Suppose you have a class called A, which doesn’t have a default constructor, and you want to embed an instance of this class as a member of another class, B:
class A { public: A (int n); // no default constructor };
When you instantiate an ordinary object of class A, you pass an argument to its constructor like this:
A a(3); // OK
However, you can’t do that when declaring an instance of A as a member of another class:
class B { public: B(); private: A a(3); // error };
You should use a member-initialization list in the containing class’s constructor to pass the embedded object’s argument:
class B { public: B() : a(3) {} // pass argument to embedded object private: A a; // no argument here };
Some classes have both a default constructor and a constructor that takes one or more arguments, (e.g., std::vector). With such classes, you should use a member-initialization list to invoke a constructor that takes arguments:
class Document { private: vector vc; // no argument here public: Document() : vc(80){} // similar to vector vc (80) };