Мне нужен доступ к статическому члену данных из деструктора, но при выходе из программы кажется, что он не может быть гарантированно по-прежнему существовать!По какой-то причине статические члены уничтожаются, в то время как все еще существуют выдающиеся экземпляры класса.Это странно, потому что я никогда не слышал совета «Никогда не получай доступ к статическим элементам из деструктора» раньше, и все же я думаю, что я знал бы о таком ограничении, если бы оно существовало.
Я приведу конкретный пример:
class MyClass {
public:
~MyClass() { m_instances.erase(m_name); }
private:
long m_name;
static std::map<long, MyClass*> m_instances;
};
В другом классе я попробовал следующий неприятный хак, который, казалось, сработал, хотя, когда я думаю об этом, я не думаю, что это действительно решение вообще.
class MyClass {
friend class Switch;
public:
~MyClass() { if (m_alive) m_instances.erase(m_name); }
private:
static bool m_alive;
class Switch {
~Switch() { MyClass::m_alive = false; }
};
static Switch m_switch;
long m_name;
static std::map<long, MyClass*> m_instances;
};
Что если экземпляр MyClass будет уничтожен после m_instances, но до m_switch ??И даже если m_switch умрет первым, логическое значение m_alive могло быть «уничтожено» и, следовательно, возможно, перезаписано на «true» (маловероятно, я знаю).
Так может ли кто-нибудь предложить лучшее решение?Я ожидаю, что упускаю что-то очень очевидное здесь.