TITLE: default and no initialization [ This tip is based on "C/C++ Users Journal" in the article "Initializing and Copying Subobjects" by Dan Saks. -adc] A class can have data members that are classes or of built in types (int, float, etc). The initialization of data members is done in the ctor-initializer, which is in turn composed of a sequence of mem-initializers. For example, class Base { public: Base () : i(10), f(100.0) {} // ^^^^^^^^^^^^^^^ ctor-initializer // ^^^^^ mem-initializer // ^^^^^^^^ mem-initializer private: int i; float f; A a; }; Leaving off the initialization for "a" still results in a call to A's default constructor. However leaving off the initialization for "i" or "f" is very different. The constructor for Base might be one of Base () : f(100.0) {} Base () : i(), f(100.0) {} In the first case, "i" will be unitialized. In the second case, "i" will be initialized with 0 converted to "i's" type (in this case int). This used to not be the case. This also applies to heap allocated objects. For example, ip = new int; ip = new int (); The former leaves the integer unitialized, the latter initializes it to 0.