class A
{
int id;
static int count;
public:
A()
{
count++;
id = count;
cout << "constructor called " << id << endl;
}
~A()
{
//count -=2; /*Keypoint is here. */
/*Uncomment it later. But result doesn't change*/
cout << "destructor called " << id << endl;
}
};
int A::count = 0;
int main()
{
A a[2];
return 0;
}
Выход
constructor called 1
constructor called 2
destructor called 2
destructor called 1
Вопрос в том:
даже если вы раскомментируете //count -=2;
результат все тот же.
Означает ли это, что если конструктор увеличивает статический член на 1, то деструктор также должен уменьшить его ровно на 1, и вы не сможете изменить его поведение?
Ничего не доступ count
после того, как первый деструктор вызван. Деструктор делает именно то, что вы написали, либо изменяя count
или нет. Но вы не увидите эффекта, если не получите доступ count
каким-то образом.
Других решений пока нет …