Singleton, как лучше инициализировать поля

72
21 июня 2021, 00:00

Есть некоторый класс, который удобно реализовать как singleton. Как лучше инициализировать его поля(информация о том как их заполнять приходит извне)?

Адекватно ли решение заставляющее клиентский код вызывать некий метод init(parameters) перед первой попыткой получить инстанс данного singlton-a?

Если да, то рентабельнее ли при этом инстанцировать лишь в том самом методе init или это совершенно не критично?

Answer 1

Я бы, во избежание использования не инициализированного класса, сделал бы так.

class Singleton
{
  private:
    static std::unique_ptr<Singleton> instance;
    // Конструкторы и оператор присваивания недоступны клиентам
    Singleton(параметры конструктора) {...}
    Singleton( const Singleton& );  
    Singleton& operator=( Singleton& );
public:
    static Singleton* init(параметры конструктора) {
        assert(instance == nullptr);
        instance = std::make_unique<Singleton>(параметры конструктора);
        return instance.get();
    } 
    static Singleton* getInstance() {
        assert(instance != nullptr);
        return instance.get();
    }
}
READ ALSO
Нажатие кнопки на сайте(не своём) через Java

Нажатие кнопки на сайте(не своём) через Java

Есть сайт, нужно, чтобы при запуске программы нажималась кнопка на сайтеСайт не должен открываться в браузере

116
RecyclerView перемещение на один элемент вперед

RecyclerView перемещение на один элемент вперед

У меня есть горизонтальный RecyclerView и хотелось бы по бокам сделать стрелочки которые бы перемещали список на один элемент вперед, как этого...

104
Про implement интерфейсов

Про implement интерфейсов

обнаружено, что если

86
Как выйти из цикла по другому?

Как выйти из цикла по другому?

Есть некий цикл (пример)

78