如何在C ++中找出从一个类创建了多少个对象?

时间:2015-10-31 22:19:09

标签: c++ class object

如何在C ++中之前找出从一个类创建了多少个对象?

4 个答案:

答案 0 :(得分:2)

使用此基类:

template<class T>
class Counter
{
public:
    Counter()
    {
        ++count;
    }

    Counter(const Counter&)
    {
        ++count;
    }

    static size_t GetCount()
    {
        return count;
    }

private:
    static size_t count;
};

template<class T>
size_t Counter<T>::count = 0;

继承它并将您的类类型作为模板参数传递。这是为每个类类型获得一个唯一的计数。

class MyClass : public Counter<MyClass>
{
};

现在你可以计算你的类的构造次数,而不必修改它自己的构造函数或者可能忘记增加其中一个的计数。

不要通过指向Counter的指针删除,因为它缺少虚拟析构函数。

答案 1 :(得分:1)

您可以添加static int instanceCount;成员变量,并在每个类构造函数中递增它:

class MyClass {
     static int instanceCount = 0;
public:
      MyClass() {
          ++instanceCount;
      }

      MyClass(const MyClass& rhs) {
          ++instanceCount;
          // Do copy code ...
      }

      static int getCreated() { return instanceCount; }
 };

答案 2 :(得分:0)

你只需定义静态整数值并将其放在构造函数中,如变量++

f = open('sampleText.txt', 'w', 0)

答案 3 :(得分:0)

我宁愿在维基页面上复制一个例子,专门介绍一个众所周知的成语CRTP。

在午夜我能为自己写的任何内容都要完整得多。此外,我发现所有其他回复确实错过了一些东西,这就是为什么我再添加一个回复列表的原因。

template <typename T> struct counter {
    static int objects_created;
    static int objects_alive;

    counter() {
        ++objects_created;
        ++objects_alive;
    }

    counter(const counter&) {
        ++objects_created;
        ++objects_alive;
    }

protected:
    ~counter() {
        --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> { // ... };

我想这是一个完整的,既有创建对象的计数器,也有活着的对象。

Here原始链接。