我按照示例使用了单例类:

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/

10-13 07:04