Always declare a polymorphic class’ copy constructor as private?this becomes important when you want to use a class in a container class for cloning.
The container class CHolder is a templatized class that holds generic objects. You also have a polymorphic class named CBase and its subclasses CDerived1 and CDerived2.
Suppose the client is storing objects of type CBase:
CHolder holder;holder.add(new CDerived1);holder.add(new CDerived2);
Consider another container instance:
CHolder holder1 = holder;
You need to copy the contained objects in CHolder‘s copy constructor. However, this results in slicing if the default copy of the contained object’s ctor is involved?because the copy in C++ is always static. Thus, you should declare the virtual clone method in CBase and override in derived.