Use Protected Constructors to Block Undesirable Object Instantiation
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 class
CommonRoot 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. Danny Kalev