1. The reason I am not creating a `static` object is because I need to have the ability to delete the created concrete object. 2. I have a base and derived class since I need to have different kinds of concrete classes. 3. I cannot use the `getInstance()` function in the base class since I cannot make it both static and virtual. <!-- language-all: lang-cpp --> class ITrafficEventsReturner { public: virtual ~ITrafficEventsReturner() {} ; protected: ITrafficEventsReturner() { }; // no definition for copy constructor and assignment operator ITrafficEventsReturner(const ITrafficEventsReturner&); ITrafficEventsReturner& operator=(const ITrafficEventsReturner&); }; class ConcreteTrafficReturner : public ITrafficEventsReturner { public: static ConcreteTrafficReturner* getInstance() { if (myself == 0) { myself = new ConcreteTrafficReturner(); } return myself; } ~ConcreteTrafficReturner() { if (myself) { delete myself; myself = 0; } } private : ConcreteTrafficReturner() : ITrafficEventsReturner() { }; static ConcreteTrafficReturner* myself; }; static ConcreteTrafficReturner* ConcreteTrafficReturner::myself = 0; ConcreteTrafficReturner* ConcreteTrafficReturner::myself = 0; int main() { ITrafficEventsReturner* ConcreteTrafficReturner = ConcreteTrafficReturner::getInstance(); delete ConcreteTrafficReturner; };