对许多类的堆栈和堆中创建的对象进行计数

ckv*_*ckv 1 c++

计算不同类在堆栈和堆中创建的对象总数的最佳方法是什么。我知道在C ++中,new和delete运算符可以重载,因此,在默认的构造函数和析构函数中,对象数可以随着对象的创建或销毁而增加或减少。

此外,如果我要扩展同一事物来对不同类的对象进行对象计数,那么我可以创建一个哑类并在该类中编写对象计数代码,然后在我创建任何新类时可以从Dummy类派生它。

对于同一问题,是否还有其他最佳解决方案。

fre*_*low 5

然后我可以创建一个虚拟类并在该类中编写对象计数代码,然后在我创建任何新类时可以从Dummy类派生它。

是的,但是由于每个类都需要自己的计数,因此您必须制作一个基类模板并使用奇怪的重复模板模式(CRTP):

template <class Derived>
class InstanceCounter
{
    static int count;

protected:

    InstanceCounter()
    {
        ++count;
    }

    ~InstanceCounter()
    {
        --count;
    }

public:

    static int instance_count()
    {
        return count;
    }
};

template <class Derived>
int InstanceCounter<Derived>::count = 0;

class Test : public InstanceCounter<Test>
{
};

int main()
{
    Test x;
    std::cout << Test::instance_count() << std::endl;
    {
        Test y;
        Test z;
        std::cout << Test::instance_count() << std::endl;
    }
    std::cout << Test::instance_count() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)