проблемы с этим синглтоном (не класс) - PullRequest
1 голос
/ 17 июня 2011

Я уверен, что на это можно было бы ответить, но я не смог найти сводный ответ.

Каковы проблемы со следующим синглтоном, который является просто функцией и гарантированно имеет инициализацию и предполагая, что T поддерживает оператор !, необходимые конструкторы, функции и т. Д.?(Я не ищу безопасности потока).Более того, другие могут создавать объекты T, так как T в моем случае - это дескриптор базы данных, который я хочу использовать для жизни моей программы.

template<typename T>
T* getInstance(){
    static T instance;
    if ( !instance && !instance.initialize() ){
       return NULL;
    }
    else {
       return &instance;
    }
}

Ответы [ 2 ]

1 голос
/ 17 июня 2011

В вашем коде есть некоторые ошибки - вместо переменной используется тип шаблона.

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

template<typename T> T* getInstance()
{
    static T instance;
    return &instance;
}
0 голосов
/ 17 июня 2011

Это даже не скомпилируется. Более того, использование синглетонов рано или поздно доставит вам неприятности. Например, когда вы уничтожите экземпляр? В C ++, как правило, лучше четко указывать конструкцию и разрушение. Поиск статического шаблона шлюза ( пример в C # ).

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...