#pragma once

namespace Framework
{
    template< class T >
    class ReferenceCounting : public T
    {
    private:
        int ref;

    public:
        ReferenceCounting()
            : T()
        {
            ref = 1;
        }

        T *getThis()
        {
            ref++;
            return this;
        }

        T *release()
        {
            if( !--ref )
                delete this;
            return 0;
        }
    };
}