Я создал класс, в котором есть статический член.Каждый раз, когда создается объект, я хочу добавить указатель на этот объект в статическом члене.
Заголовочный файл:
#include <vector>
class A
{
public:
A(const int pin);
~A();
static std::vector<A*> channels;
private:
int pin_number;
}
cpp файл:
#include "A.h"
std::vector<A*> A::channels;
A::A(const int pin) : pin_number(pin) { A::channels.push_back(this); };
A::~A() {
std::vector<A*>::iterator ch = std::find(A::channels.begin(), A::channels.end(), this);
if (ch != A::channels.end()) {
A::channels.erase(ch);
}
В main.cpp я хочу объявить объект.Однако, когда я объявляю и инициализирую как глобальную переменную, она, похоже, не работает:
A a1{ 1 };
A a2{ 2 };
int main() {
std::cout << "Vector size: " << A::channels.size() << std::endl;
}
Вышеупомянутый код, похоже, не работает.В конструкторе объекта я вижу заполненный вектор.Выход 0 в приведенном выше случае.
Для 2 приведенных ниже примеров кода, похоже, все же работает.
Образец 1:
A *a1;
A *a2;
int main() {
a1 = new A{ 1 };
a2 = new A{ 2 };
std::cout << "Vector size: " << A::channels.size() << std::endl;
}
Образец 2:
int main() {
A a1{ 1 };
A a2{ 2 };
std::cout << "Vector size: " << A::channels.size() << std::endl;
}
В приведенных выше 2 случаях выводится 2, что я и ожидал.
Может кто-нибудь помочь мне объяснить, что я делаю неправильно или чего мне не хватает.Я предполагаю, что это как-то связано с областью действия объектов, но я не могу понять, почему первый пример не работает.
Редактировать: я не добавил деструктор для класса, так как не думал, что он уместен для этого вопроса.