我如何知道在C+;中,一个类已经创建了多少个对象+;? 在C++中,从一个类中创建了多少个对象?
,可以添加一个<代码>静态int实例;代码>成员变量,并在每个类构造函数中递增它:我如何知道在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 ...
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=
不会更改存在对象的数量。为什么不更改?我不明白你的意思。@skypjacktx,y代码>存在2个对象<代码>x=y代码>存在2个对象。谢谢兄弟;)@NeilKirkoperator=
不会更改存在对象的数量。为什么不更改?我不明白你的意思。