首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算单个派生类的实例数

计算单个派生类的实例数
EN

Stack Overflow用户
提问于 2009-04-21 13:43:28
回答 10查看 5.4K关注 0票数 4

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

例如,假设我有以下内容:

代码语言:javascript
复制
class A;
class B: public A;
class C: public B;

然后我有了这个代码

代码语言:javascript
复制
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());

结果应打印出来

代码语言:javascript
复制
 1
代码语言:javascript
复制
 1
代码语言:javascript
复制
 2

理想情况下,计数应该在内部完成。每个类,而不是某种类型的管理器,都应该知道它有多少实例。

有什么想法吗?

谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2009-04-21 13:54:20

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

代码语言:javascript
复制
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;
票数 6
EN
查看全部 10 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/772655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档