我按照示例使用了单例类:
singleton class
但我得到的错误是 “未解析的外部符号”
这是我试过的代码:
#include<iostream>
using namespace std;
class singleton
{
int value;
static singleton *instance;
protected:
singleton()
{
value=0;
}
public:
static void initialize()
{
if(instance==NULL)
singleton();
else
cout<<"An instance of singleton already exist...";
}
static singleton& getInstance()
{
return *instance;
}
int getValue()
{
return value;
}
};
void main()
{
singleton::initialize();
}
对 Singleton 类的一些解释真的很棒。其使用的方案。优点和缺点。单例的替代品。等等
最佳答案
首先,我认为:
singleton();
应该:
instance = new singleton();
按照您的方式,您实际上并未存储新实例化的对象,因此
instance
将始终为空。显式设置静态也是一种很好的形式:
singleton *singleton::instance = 0;
(在类定义之外)。
事实上,从基线单例代码开始并从那里开始工作可能会更好。这是一个标准形式的指针版本:
#include <iostream>
class singleton {
protected:
static singleton *instance;
singleton() { }
public:
static singleton *getInstance() {
if (instance == 0)
instance = new singleton();
return instance;
}
};
singleton *singleton::instance = 0;
int main() {
singleton *s1 = singleton::getInstance();
singleton *s2 = singleton::getInstance();
std::cout << s1 << '\n';
std::cout << s2 << '\n';
return 0;
}
您可以从输出中看到两个指针是相同的:
0xbc0358
0xbc0358
或引用版本,因为这似乎是您的目标:
#include <iostream>
class singleton {
protected:
static singleton *instance;
singleton() { }
public:
static singleton& getInstance() {
if (instance == 0)
instance = new singleton();
return *instance;
}
};
singleton *singleton::instance = 0;
int main() {
singleton &s1 = singleton::getInstance();
singleton &s2 = singleton::getInstance();
std::cout << &s1 << '\n';
std::cout << &s2 << '\n';
return 0;
}
关于c++ - C++中的Singleton类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8906817/