То, что вы описали, звучит очень похоже на синглтон .Один способ, которым это часто обрабатывается, состоит в том, чтобы синглтон-класс включал метод static
, который возвращает один экземпляр класса.Так это будет выглядеть примерно так:
class A {
public:
A() { /* constructor */ }
~A() { /* destructor */ }
static A* getInstance();
double get_value(void) {
return value;
}
private:
double value;
};
Метод static
будет в файле реализации (.cpp) выглядеть примерно так:
static A gSharedInstance;
static A* A::getInstance()
{
return &gSharedInstance;
}
Это создает A
во время статической инициализации и при вызове вышеуказанного метода он возвращает указатель на этот статический общий экземпляр.Теперь, где бы вы ни хотели использовать A
, вы можете просто сделать:
A* sharedA = A::getInstance();
double value = sharedA->getValue(); // Or whatever you need from it.
Обратите внимание, что синглтон по сути является глобальной переменной, и у глобальных переменных есть некоторые проблемы.(Например, где его элемент value
установлен в этом случае?) Но если класс представляет какой-то действительно уникальный ресурс (например, единственный микрофон на устройстве), то для его представления стоит иметь синглтон.В этом случае может быть лучше сделать его доступным только для чтения, чтобы его состояние не могло быть установлено во многих разных местах.Также имейте в виду, что вам может потребоваться добавить код для одновременного доступа к нескольким потокам.