Counting instances of individual derived classes

前端 未结 10 915
南笙
南笙 2021-01-06 04:42

I\'d like to be able to count instances of classes that belong in the same class hierarchy.

For example, let\'s say I have this:

class A;
class B: pu         


        
10条回答
  •  Happy的楠姐
    2021-01-06 04:55

    A very crude way would be:

    class A
    {
    public:
        static int m_instanceCount;
        A(bool derivedInstance = false)
        {
            if(! derivedInstance)
            {
                ++m_instanceCount;
            }
        }
        virtual ~A()
        {
            --m_instanceCount;
        }
        virtual int GetInstanceCount()
        {
            return m_instanceCount;
        }
    };
    
    int A::m_instanceCount = 0;
    
    
    class B : public A
    {
    public:
        static int m_instanceCount;
        B(bool derivedInstance = false): A(true) 
        {
            if(! derivedInstance)
            {
                ++m_instanceCount;
            }
        }
        virtual ~B()
        {
            --m_instanceCount;
        }
        virtual int GetInstanceCount()
        {
            return m_instanceCount;
        }
    };
    
    int B::m_instanceCount = 0;
    
    
    class C : public B
    {
    public:
        static int m_instanceCount;
        C(): B(true) {++m_instanceCount;}
        virtual ~C()
        {
            --m_instanceCount;
        }
        virtual int GetInstanceCount()
        {
            return m_instanceCount;
        }
    };
    
    int C::m_instanceCount = 0;
    
    
    
    
    void main(int argc,char *argv[])
    {   
        A* p1 = new A;
        B* p2 = new B;
        C* p3 = new C;
        C* p4 = new C;
        A* p5 = new A;
    
        delete p5;
    
        std::cout<GetInstanceCount()<<"\n";
        std::cout<GetInstanceCount()<<"\n";
        std::cout<GetInstanceCount()<<"\n";
    }   
    

提交回复
热议问题