计算从类创建的对象数
Count number of objects created from a class
我想实现一个功能,我可以知道使用特定类创建了多少对象。
我尝试了以下内容:
myClass.h
class myClass {
private:
static int internalCounter;
int id;
public:
myClass(): id(internalCounter) {internalCounter++;}
}
问题是C 不允许这样做,我不确定如何解决此问题。我在SA中看到了类似的问题,其中答案暗示了类似的问题:
myClass::internalCounter = 0;
,但我认为这在语法级别上不正确。
c dies 允许这样做。但是静态变量需要一个定义,听起来像是缺少的。您需要将其放入源文件(而不是标题)
int myClass::internalCounter = 0;
= 0
是可选的,因为静态变量默认情况下是零置序列化的,但您可能更喜欢明确。
您需要将静态变量定义为
int myClass::internalCounter = 0;
在实现文件中。
您看到的另一个建议几乎是正确的。您需要这样的东西:
int myClass::internalCounter = 0;
,但需要进入源文件(*.cpp)而不是标题。该行是必要的,因为单独声明(在标题文件中)否则将永远不会实例化。在源文件中解决它意味着它将被拾取并在特定的翻译单元中实例化。
您必须定义静态变量:
int myClass::internalCounter=0;
在您的实现文件中,始终最好读取您的编译器/链接器输出,如果G ,则是:
main.cpp:(.text.startup+0x2): undefined reference to `myClass::internalCounter'
undefined reference
表示未定义,这是您必须在代码中修复的提示
我会建议,当您需要将计数器放入源文件中时,您将其定义从类中取出,然后将其放入匿名的名称空间区域。这将类的一些实施细节从您的标题文件中删除。
如果您在C 中工作11使用atomic_int
而不是int
。
使用inccrement算子使操作正确原子。
myClass.h
class myClass
{
private:
int id;
public:
myClass();
// etc
};
myClass.cpp
#include <atomic>
#include "myClass.h"
namespace {
static std::atomic_int internalCounter;
}
myClass::myClass()
: id( internalCounter++ )
{
}
Atomic_int上的 operator++
inomic_int提示是原子能的,因此它将是线程的。
相关文章:
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 具有包含其他对象的类的对象创建顺序
- 为什么我们再次从结构对象创建结构变量?
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 如何创建一个对象创建函数,该函数将由与其关联的名称调用?
- 如何为自定义模板对象创建专门的函数模板
- 对象创建错误的C++矢量
- 如何为Python Swigged C++对象创建和分配回调函数
- 在 C++ 中为 C 样式对象创建一个透明包装类
- 此类模板的对象创建如何工作?
- C++ 中的对象创建类型有什么区别?
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 如何仅通过父类对象限制对象创建
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 无法将类对象创建为另一个类的成员
- 如何从现有基类对象创建派生类对象
- 在 DTor 之前删除的静态对象创建的线程?
- C++:定义多个构造函数时的对象创建/销毁序列
- 从对象创建矢量包装器,该对象只允许使用索引访问向量
- 是否可以为CPP中的对象创建一组指针