我确信这可以得到解答,但我实际上找不到合并的答案。
以下单例有什么问题只是一个函数,并保证有初始化并假设T支持operator!,需要构造函数,函数等? (我不是在寻找线程安全)。更重要的是,在我的情况下,其他人可以创建T的对象,这是我希望在我的程序生命中使用的数据库句柄。
template<typename T>
T* getInstance(){
static T instance;
if ( !instance && !instance.initialize() ){
return NULL;
}
else {
return &instance;
}
}
答案 0 :(得分:1)
您的代码中存在一些错误 - 正在使用模板类型而不是变量。
根据您的需要(不关心线程安全性以及在整个应用程序期间需要它),它可能正是您所需要的。你可能希望从这开始:
template<typename T> T* getInstance()
{
static T instance;
return &instance;
}
答案 1 :(得分:0)
这甚至都不会编译。而且,使用单身会迟早会让你陷入困境。例如,你何时会销毁实例?在C ++中,通常更好地明确构造和破坏。查找static gateway pattern(example in C#)。
祝你好运!