идеальный шаблон дизайна синглтона

0

в последнее время я столкнулся с вопросом, дизайн идеальный одноцветный шаблон. Я разработал, используя один статический экземпляр, и одна статическая функция возвращает этот экземпляр, как показано ниже.

ST* ST::instance = NULL;
ST* ST::getInstance()
{
    mutex.lock();

    if(!instance)
       instance  = new ST();

    mutex.lock();

    return instance ;
}

Он попросил меня писать без использования мьютекса (написать идеальный синглтон без использования какого-либо механизма синхронизации), затем я изменил, как показано ниже.

ST* ST::instance = new ST();
ST* ST::getInstance()
{
    return instance ;
}

Это идеальный дизайн? что он имеет в виду идеальный дизайн одного тонального шаблона??? Каким может быть его ожидание дизайна?

Заранее спасибо.

  • 0
    какова видимость ST :: instance?
  • 2
    Только он может ответить, какова его идея идеального синглтона. Может быть, он искал этот Singleton& Singleton::instance() { static Singleton s; return s; } C ++ 11 гарантирует, что конструкция является поточно-ориентированной. Или это может быть вопрос с подвохом, так как совершенный синглтон - это оксюморон.
Теги:
singleton

1 ответ

1

Не существует идеального синглтона. Фактически, это открывает какой-то вопрос, есть ли какой-нибудь синглтон, который стоит чего-то вообще.

Тем не менее, в C++ Мейерс Синглтон обычно является наименее проблематичным. Ядро этого выглядит примерно так:

static T &get_instance() { 
    static T t;
    return t;
}    

Поэтому основная идея состоит в том, чтобы определить один экземпляр целевого типа как статический, локальный для статической функции-члена. Эта статическая функция-член возвращает ссылку на этот объект. Все конструкторы singleton являются частными, поэтому только функции-члены могут использовать их для создания (или уничтожения) объектов этого класса. По сути, это означает, что только одна статическая функция-член может когда-либо создавать экземпляр, и он создает только один статический экземпляр, поэтому все использование этого одного экземпляра.

Конечно, если вы хотите достаточно плохо, вы можете вернуть указатель вместо ссылки, но это редко бывает хорошей идеей (возможно, не хорошим кандидатом на "идеальный").

Ещё вопросы

Сообщество Overcoder
Наверх
Меню