Я что-то пробовал, и я не знаю, что происходит с кодом.У меня есть класс, который имеет статический член и конструктор по умолчанию и перегружен.
class Remote
{
public:
static std::vector<Remote*> channels;
static void interrupt() {
for (Remote* r : channels) {
r->ProcessInterrupt();
};
}
void ProcessInterrupt() {
std::cout << "ProcessInterrupt called.";
};
Remote(const int a) {
std::cout << "Remote(const int a) called.\n";
channels.push_back(this);
}
Remote() {
Remote(1);
std::cout << "Remote() called.\n";
}
~Remote() {
std::vector<Remote *>::iterator ch = std::find(channels.begin(), channels.end(), this);
if (ch != channels.end()) {
channels.erase(ch);
};
}
};
В main.cpp я объявляю два экземпляра класса Remote.Теперь я заметил, что если я создаю их экземпляр с помощью конструктора по умолчанию, указатели не добавляются в вектор.Затем я попытался использовать перегруженный конструктор, и он добавляет его в вектор.
Remote r1 = Remote();
Remote r2 = Remote(1);
std::cout << Remote::channels.size() << "\n";
Remote::interrupt();
Я ожидаю, что, поскольку я вызываю перегруженный конструктор, он все равно добавит указатель на вектор.Это, однако, явно не происходит.
Может ли кто-нибудь объяснить, что происходит?
С уважением,
Боб