class CBadExample { public: CBadExample(); CBadExample(CBadExample& NewExample); void Function(CBadExample NewValue); private: }; CBadExample::CBadExample() { } CBadExample::CBadExample(CBadExample& NewExample) { Function(NewExample); } //every time this function is called the copy constructor //is automatical called. It in-turn calls this function again void CBadExample::Function(CBadExample NewValue) { } ///////////////////////////////////////////////////////////// class CGoodExample { public: CGoodExample(); CGoodExample(const CGoodExample& NewExample); void Function(const CGoodExample& NewValue); private: }; CGoodExample::CGoodExample() { } CGoodExample::CGoodExample(const CGoodExample& NewExample) { Function(NewExample); } //no copy constructor is called this way void CGoodExample::Function(const CGoodExample& NewValue) { } ///////////////////////////////////////////////////////////////// void main() { CGoodExample GoodExample1; CGoodExample GoodExample2(GoodExample1); CBadExample BadExample1; CBadExample BadExample2(BadExample1); }