我如何知道在C+;中,一个类已经创建了多少个对象+;? 在C++中,从一个类中创建了多少个对象?

我如何知道在C+;中,一个类已经创建了多少个对象+;? 在C++中,从一个类中创建了多少个对象?,c++,class,object,C++,Class,Object,,可以添加一个静态int实例;代码>成员变量,并在每个类构造函数中递增它: class MyClass { static int instanceCount = 0; public: MyClass() { ++instanceCount; } MyClass(const MyClass& rhs) { ++instanceCount; // Do copy code ...

,可以添加一个<代码>静态int实例;代码>成员变量,并在每个类构造函数中递增它:

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

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

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

您只需定义静态整数值,并将其放入类似构造函数的变量中++

class count_opjs{
Public:
 static int counter;
 constructor(){
   counter++;
 }
}
// Initialize static member of class count_opjs
int count_opjs::counter = 0;
使用此基类:

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;
模板
班级计数器
{
公众:
计数器()
{
++计数;
}
计数器(常数计数器&)
{
++计数;
}
静态大小\u t GetCount()
{
返回计数;
}
私人:
静态大小计数;
};
模板
大小\u t计数器::计数=0;
从中继承并将类类型作为模板参数传递。这是为了获得每个类类型的唯一计数

class MyClass : public Counter<MyClass>
{
};
class MyClass:公共计数器
{
};
现在,您可以计算类的构造次数,而不必修改自己的构造函数,或者可能忘记在其中一个构造函数中增加计数


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

我宁愿从wiki页面复制一个例子,专门介绍一个众所周知的习惯用法,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> { // ... };
模板结构计数器{
创建静态int对象;
静态int对象_活动;
计数器(){
++创建的对象;
++有生命的物体;
}
计数器(常数计数器&){
++创建的对象;
++有生命的物体;
}
受保护的:
~counter(){
--有生命的物体;
}
};
模板int计数器::创建的对象(0);
模板int计数器::对象_活动(0);
X类:计数器{/…};
Y类:计数器{/…};
我想这是一个完整的,既有一个计数器用于创建对象,也有一个计数器用于仍然存在的对象


原始链接。

定义一个静态成员计数器,该计数器将在每次类构造函数调用中增加一个。@101010别忘了复制构造函数。我不知道为什么它被搁置太久。确实提供了一个简短而具体的答案。
MyClass A;MyClass b=a计数是多少?@NeilKirk,正如我在你的每个构造函数中提到的。在你的示例中,你没有在每个类的构造函数中增加它。现在用户必须实现一个完整的副本构造函数,即使默认生成的构造函数是正确的。那不是很有帮助。喜欢这种问题。虚拟析构函数中不也应该有一个
--count
?此外,还缺少“复制”操作符。@skypjack如果用户要计算曾经创建的对象总数或当前数量,则由用户决定
operator=
不会更改存在对象的数量。为什么不更改?我不明白你的意思。@skypjack
tx,y存在2个对象<代码>x=y存在2个对象。谢谢兄弟;)@NeilKirk
operator=
不会更改存在对象的数量。为什么不更改?我不明白你的意思。