#include <iostream>
using namespace std;
class CCC {
public:
CCC() {cout<<"created "<<++count<<endl;}
~CCC(){cout<<"deleted "<<--count<<endl;}
int count=0;
};
CCC a;
CCC& create() {
return a;
}
int main () {
CCC result = create();
}
上面的代码产生奇怪的输出。看起来析构函数被调用了2次,但计数没有减少。这是为什么?
created 1
deleted 0
deleted 0
该count
成员是非静态的,因此的每个实例CCC
都有其自己的副本。
对于instance a
,count
当默认构造函数启动时,该成员将设置为0,然后递增为1并打印。以后它将被销毁,该count
成员递减为0,然后再次打印。
对于实例result
,该count
成员由复制构造函数设置为1,因为它是1 in a
。当销毁它时,该成员递减为0并再次打印。
如果您想跟踪存在的类的实例总数,则需要一个静态成员,
static int count = 0;
此外,您不仅需要在默认构造函数中,而且还需要在复制和移动构造函数中对其进行递增。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句