In order to block creation of class instances, you can declare its constructor as protected.
class CommonRoot { protected: CommonRoot(){}//no objects of this class can be instantiated};class Derived: public CommonRoot {public: Derived() {}};Derived d; // OK, constructor of d has access to any protected member in its base classCommonRoot cr; //compilation error: attempt to access a protected member of CommonRoot
The same effect of blocking instantiation of a class can be achieved with pure virtual functions. However, these add runtime and space overhead. When pure virtual functions aren’t needed, you can use a protected constructor instead.