Complete implementation         Intermediate Tutorial 1 - source (complete)

Here is a working example of Intermediate Tutorial 1, complete with multiple robots that can be animated, along with factory classes for generating objects, with a complete Singleton implementation that was obtained from this post http://www.gamedev.net/community/forums/topic.asp?topic_id=301651 by cuzman in the GameDev.net forums.

All the classes are one big mess I know.

singleton.h

//------------------------------------------------------
// file: singleton.h
// description: this is the template singleton class
//------------------------------------------------------

#ifndef IM_TUTORIAL1_SINGLETON_H__
#define IM_TUTORIAL1_SINGLETON_H__

namespace IntermediateTutorial1 {

//     This class was found in a post in GameDev.net.  I assume
//     it is public domain, since it was posted in a public forum
//     for the purpose of being improved upon and being
//     utilized
//     
//     I modified it to create itself automatically in the
//     getSingleton method instead of having a seperate
//     initSingleton static method.  Also added was the ability 
//     to get a ptr or a reference to the Singleton
//     
//     The original author's name is cozman
//    
//      Original Post:
//      http://www.gamedev.net/community/forums/topic.asp?topic_id=301651
//      
//            Singleton solution w/ auto_ptr?
//            
//            cozman  GDNet+  Member since: 8/7/2001  From: Cary, United States 
//            
//            Posted - 2/17/2005 11:12:04 PM 
//            I was toying around with creating a generic Singleton class. 
//            I was wondering if any of you could comment on this idea:
//            
//            #include <cassert>
//            #include <memory>
//            #include <iostream>
//            
//            template<class T>
//            class Singleton
//            {
//            public:   
//                static void initSingleton()
//                {
//                    assert(instance_.get() == 0);
//                    
//                    instance_ = std::auto_ptr<T>(new T);
//                }
//            
//                static T& getSingleton()
//                {
//                    assert(instance_.get() != 0);
//                    
//                    return *instance_;
//                }
//                
//                static void destroySingleton()
//                {
//                    assert(instance_.get() != 0);
//                    
//                    instance_.reset();
//                }
//            
//                virtual ~Singleton()=0;
//            
//            private:
//                
//                static std::auto_ptr<T> instance_;
//            };
//            
//            template<class T> 
//            std::auto_ptr<T> Singleton<T>::instance_(0);
//            
//            template<class T>
//            Singleton<T>::~Singleton() { }
//            
//            class Something : public Singleton<Something>
//            {
//                friend class Singleton<Something>;
//                friend class std::auto_ptr<Something>;
//            private:
//                Something() { std::cout << "created" << std::endl; }
//                ~Something() { std::cout << "destroyed" << std::endl; }
//            };
//            
//            
//            From basic testing it works fine, you can't leak memory, 
//            but you can also control the order of destruction if it 
//            is important.
//
//            Does anyone have any suggestions?
    
        
    /** 
        Template class for creating single-instance global classes.
    */

    template<class T>
    class Singleton
    {
    public:   
    //    static void initSingleton()
    //    {
    //        assert(instance_.get() == 0);
    //        
    //        instance_ = std::auto_ptr<T>(new T);
    //    }
    
        static T& getSingleton()
        {
            if(instance_.get() == 0)
                 instance_ = std::auto_ptr<T>(new T);
            return *(instance_.get());
        }
        
        static T* getSingletonPtr()
        {
            return &(getSingleton());
        }
        
        static void destroySingleton()
        {
            assert(instance_.get() != 0);
            
            instance_.reset();
        }
    
        virtual ~Singleton()=0;
    
    private:
        
        static std::auto_ptr<T> instance_;
    };
    
    template<class T> 
    std::auto_ptr<T> Singleton<T>::instance_(0);
    
    template<class T>
    Singleton<T>::~Singleton() { }
    
    // implementation details
    //class Something : public Singleton<Something>
    //{
    //    friend class Singleton<Something>;
    //    friend class std::auto_ptr<Something>;
    //private:
    //    Something() { std::cout << "created" << std::endl; }
    //    ~Something() { std::cout << "destroyed" << std::endl; }
    //};

}
#endif


im_tutorial1.h

#ifndef IM_TUTORIAL2_H__
#   define IM_TURORIAL2_H__

#   define CREATOR_CLASS(x) friend class x

#endif


Go on to im_tutorial1.cpp source code