这个单身人士的问题(不是班级)

时间:2011-06-17 13:59:41

标签: c++ templates function singleton

我确信这可以得到解答,但我实际上找不到合并的答案。

以下单例有什么问题只是一个函数,并保证有初始化并假设T支持operator!,需要构造函数,函数等? (我不是在寻找线程安全)。更重要的是,在我的情况下,其他人可以创建T的对象,这是我希望在我的程序生命中使用的数据库句柄。

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

2 个答案:

答案 0 :(得分:1)

您的代码中存在一些错误 - 正在使用模板类型而不是变量。

根据您的需要(不关心线程安全性以及在整个应用程序期间需要它),它可能正是您所需要的。你可能希望从这开始:

template<typename T> T* getInstance()
{
    static T instance;
    return &instance;
}

答案 1 :(得分:0)

这甚至都不会编译。而且,使用单身会迟早会让你陷入困境。例如,你何时会销毁实例?在C ++中,通常更好地明确构造和破坏。查找static gateway patternexample in C#)。

祝你好运!