pMod(mc.pMod) is a shallow copy. Both pointers points to the same address (to the same object) pMod( mc.pMod->clone() ) is a depth copy. A new object is created. The objects could be considered 'equal' (not the 'same'), the pointers point to different address.
ne555: I believe that is the desired behavior in this case. This program contains multiple levels of data objects. The variable pMod is a back-pointer to an object that contains an object of MyClass. In the (unlikely) event that the containing class ever has more than one object of MyClass, they should point to the same place. It could probably be static, as far as that goes.
It's really, *really* unlikely that this constructor will ever be called, as the program only calls for a single instance of this object, but I just like to have them correct, just in case.