#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();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生奇怪的输出。看起来析构函数被调用了 2 次,但计数没有减少。这是为什么?
created 1
deleted 0
deleted 0
Run Code Online (Sandbox Code Playgroud)
该count成员是非静态的,因此每个实例CCC都有自己的副本。
对于 instance a,count当默认构造函数启动时,成员将设置为 0,然后递增为 1 并打印。稍后它会被销毁,count成员递减为0,并再次打印。
对于该实例result,该count成员被复制构造函数设置为 1,因为它是 1 in a。当它被销毁时,该成员递减为 0 并再次打印。
如果要跟踪存在的类的实例总数,则需要一个静态成员,
static int count = 0;
Run Code Online (Sandbox Code Playgroud)
此外,您不仅需要在默认构造函数中增加它,还需要在复制和移动构造函数中增加它。