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 an 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


> 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; };