当前位置: 首页 > 知识库问答 >
问题:

如何在类中声明一个变量,该变量将跟踪C++[duplicate]创建的对象的计数

荀子轩
2023-03-14

如何在类中声明一个变量,该变量将跟踪创建的对象的计数?示例对象obj;obj.object_count();

共有1个答案

隆宏爽
2023-03-14

您可以使用static类成员存储对象计数。并在类构造函数中增加其值,在析构函数中减少其值。

请查找内联备注:

#include <iostream>
#include <atomic>

class Object
{
public:
    Object()    // Constructor
    {
        // initialize the object
        // ...

        m_objCount++;   // Increase object count when creating object (In constructor)
    }

    Object(const Object& obj)   // Copy constructor
    {
        m_objCount++;
    }

    Object(Object&&) // Move constructor
    {
        m_objCount++;
    }

    ~Object()
    {
        m_objCount--;   // Decrease object count when destroying object
    }

    static int object_count()   // Define a static member function to retrive the count
    {
        return m_objCount;
    }

private:
    static std::atomic_int m_objCount;  // Use static member to store object count, 
                                        // use std::atomic_int to make sure it is thread safe
};

std::atomic_int Object::m_objCount; // Initialize static member

int main()
{
    Object obj;

    // prints "obj count: 1"
    std::cout << "obj count: " << obj.object_count() << std::endl;          // call object_count() with object
    std::cout << "obj count: " << Object::object_count() << std::endl;      // call object_count() with class name
}
 类似资料:
  • 问题内容: 我有一个带有变量StudentID的班级Student: 我希望变量StudentID继续分配给每个Student创建的新ID号。每个ID号都应比上一个创建的ID号大一个,并且应等于已创建的对象总数。现在,每个对象的ID号为1。 问题答案: 将studentID设为静态成员 静态成员将在整个类的每个实例中保留,无论有多少个clas实例。

  • 我有两个Java类,Product和ProductReview。ProductReview除了变量long id和String review外,还有一个名为Product的变量,该变量应包含类Product中的一个对象。例子: Products类有私有变量long id、String name和List评论(它也从Product评论类中获取评论)。产品类与Product评论有一对多的关联,反之亦然

  • 下面会对C语言、着色器语言ES GLSL、javascript语言和TypeScript语言声明变量的方式进行简单展示,这样可以更方便不同基础读者类比学习。 C语言 着色器语言ES GLSL和C语言有很多相似之处,如果你有一定的C语言基础,对于学习着色器语言也是有一定的帮助的。 // C语言声明一个整形变量并赋值10 int count = 10; // 改变变量值,重新赋值 count=20;

  • 请考虑以下代码: 在foo中,的类型将是。 我想在中创建一个变量,它的类型是的泛型,在本例中是。 有没有办法做到这一点?谢谢。 编辑不幸的是(我想)我无法重写签名,因为函数是用不同类型的对象调用的,例如

  • 可能重复: Java中的动态变量名: 假设我有一个字符串,如下所示。 现在,我想创建一个字符串,但是字符串的变量将被称为“Hello”。为了使字符串名为“Hello”,我必须访问string以获取名称“Hello”,这样我就可以将其用作变量名。下面是我想看的。 感谢您的努力,请尝试向我解释,因为我是Java初学者D

  • 问题内容: 如何在mysql中声明变量,以便第二个查询可以使用它? 我想写一些像: 问题答案: MySQL中主要有三种类型的变量: 用户定义的变量 (以开头): 您可以访问任何用户定义的变量,而无需对其进行声明或初始化。如果引用的变量尚未初始化,则其值为和字符串类型。 您可以使用或语句来初始化变量: 要么 可以从一组有限的数据类型中为用户变量分配一个值:整数,十进制,浮点数,二进制或非二进制字符串