Статическая инициализация C ++ класса без сохранения состояния

Предположим, у меня есть класс T, в котором

  1. T не имеет виртуальных функций.
  2. Экземпляры T не имеют состояния.
  3. T имеет статические экземпляры-члены самого себя.
  4. Сам T не имеет другого состояния.

Может ли фиаско статической инициализации C ++ разрушить мою программу? Я так не думаю, потому что даже если один из статических экземпляров не инициализирован перед использованием, это не имеет значения, потому что объекты T не имеют состояния.

Я заинтересован в том, чтобы сделать это для классов, подобных перечислению, например:


// Switch.h

class Switch {
public:
    static Switch const ON;
    static Switch const OFF;
    bool operator== (Switch const &s) const;
    bool operator!= (Switch const &s) const;
private:
    Switch () {}
    Switch (Switch const &); // no implementation
    Switch & operator= (Switch const &); // no implementation
};

// Switch.cpp

Switch const Switch::ON;
Switch const Switch::OFF;

bool Switch::operator== (Switch const &s) const {
    return this == &s;
}

bool Switch::operator!= (Switch const &s) const {
    return this != &s;
}
7
задан Thomas Eding 17 May 2011 в 00:50
поделиться