如何找到C ++中存活的对象数?

时间:2010-10-16 05:14:49

标签: c++

我想找到目前在C ++中存活的类的对象。 请告诉我一个解决方案。 另外,如果我的逻辑错误,请更正!

  • 声明一个全局变量。
  • 在构造函数调用期间增加它。
  • 析构函数调用期间的减少。

提前致谢。

Sanjeev

4 个答案:

答案 0 :(得分:7)

你的逻辑是正确的,除了一件事:不要把它变成一个全局变量;这是不整洁的,并且存在一些其他代码中的错误可能会修改它的危险。而是将它作为类的私有静态成员变量。

答案 1 :(得分:6)

将类中的静态变量保留为count。全局变量不是好的做法。

答案 2 :(得分:1)

看看奇怪的重复出现的模板模式,这对于这类事情很有用,wikipedia中的示例显示了如何将它用于对象计数器。

template <typename T>
struct counter
{
    counter()
    {
        ++objects_created;
        ++objects_alive;
    }

    virtual ~counter()
    {
        --objects_alive;
    }
    // if you are using multiple threads, these need to be protected
    // with interlocked operations as appropriate per your compiler + platform
    static int objects_created;
    static int objects_alive;
};
template <typename T> int counter<T>::objects_created( 0 );
template <typename T> int counter<T>::objects_alive( 0 );

class X : counter<X>
{
    // ...
};

class Y : counter<Y>
{
    // ...
};

答案 3 :(得分:0)

在C ++中是不可能的。跟踪构造函数和析构函数并不能保证准确性:如何防止这样的内存复制:

memcpy(buf, &instance, sizeof(T));
T* anotherInstance = (T*)buf;