devxlogo

Always Declare a Polymorphic Class’ Copy Constructor as Private

Always Declare a Polymorphic Class’ Copy Constructor as Private

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.

devx-admin

Share the Post: