Always declare a polymorphic class' copy constructor as privatethis 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<CBase *> holder;
holder.add(new CDerived1);
holder.add(new CDerived2);
Consider another container instance:
CHolder<CBase*> 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 involvedbecause the copy in C++ is always static. Thus, you should declare the virtual clone method in
CBase and override in derived.