Я написал программу, которая была в одном файле, и методы были объявлены в заголовке. Первоначально программа работала отлично, когда она была в одном файле. Но когда я отделил программу, я продолжал получать случайные вхождения для деструктора одного из классов, который был объявлен в файле заголовка.Статические переменные, отдельная компиляция
У меня есть статическая переменная в моем заголовке, чтобы подсчитать количество объектов определенного класса. Всякий раз, когда я создаю объект, я увеличиваю эту переменную. Затем в моем деструкторе я вычитаю 1 из этой переменной, проверьте, равен ли он 0 (что означает последний объект) и что-то делать. Иногда значение кажется выключенным, я не знаю, почему. У меня есть случайные вызовы в моем приложении, но я не понимаю, почему это повлияло бы на то, что я описал выше, спасибо. Любая помощь или проницательность оценены!
[Обновить]: есть базовый класс, который содержит деструктор, который реализован в заголовке, тогда у меня есть два производных класса, которые в своем конструкторе увеличивают статический var .. так что я могу сделать?
То, что я пытаюсь сделать, это следующее: В моем заголовке я это:
class A {
public:
virtual ~A() {
count --;
if (count == 0) { /* this is the last one, do something */ }
}
class B : public A {
public:
B();
}
Тогда в классе BI имеют
B::B() {
count++;
}
Где я могу определить подсчитывать, так что я не получить вводящие в заблуждение подсчеты? Благодарю.
Причина, по которой он иногда не добавляет происходит потому, что компилятор автоматически генерировать конструктор копирования для вас. Конструктор копии по умолчанию не будет увеличивать значение счетчика. –