计算各个派生类的实例

djc*_*uch 4 c++

我希望能够计算属于同一类层次结构的类的实例.

例如,假设我有这个:

class A;
class B: public A;
class C: public B;
Run Code Online (Sandbox Code Playgroud)

然后我有这个代码

A* tempA = new A;
B* tempB = new B;
C* tempC = new C;
C* tempC2 = new C;

printf(tempA->GetInstancesCount());
printf(tempB->GetInstancesCount());
printf(tempC->GetInstancesCount());
Run Code Online (Sandbox Code Playgroud)

结果应该打印
1
1
2

理想情况下,计数应该在内部进行.每个类,而不是某种经理,应该知道它有多少个实例.

有任何想法吗?

谢谢!

Myk*_*yev 6

提出的解决方案存在一个问题:当您创建B时,您将自动调用构造函数,从而增加A的计数.

class A
{
public:
    A(bool doCount = true)
    {
        if (doCount)
            ++instanceCount_;
    }

    static std::size_t GetInstanceCount()
    {
        return instanceCount_;
    }

    virtual ~A(){}
private:
    static std::size_t instanceCount_;
};

class B: public A
{
public:
    B(bool doCount = true):A(false)
    {
        if (doCount)
            ++instanceCount_;
    }

    static std::size_t GetInstanceCount()
    {
        return instanceCount_;
    }
private:
    static std::size_t instanceCount_;
};

std::size_t A::instanceCount_ = 0;
std::size_t B::instanceCount_ = 0;
Run Code Online (Sandbox Code Playgroud)