对Singleton的未定义引用::实例



我正在尝试编码单身人士。当我编译时,我会收到许多未定义的错误,例如instancegetSingleton()中的CC_3

对" Singleton ::实例'
的不确定引用 对" Singleton :: Mutex _'

的未定义引用
#include<iostream>
#include<string>
#include<mutex>
using namespace std;
class Singleton{
public:
    static Singleton* getSingleton(){
        if(instance == NULL){
            mutex_.lock();
            if(instance == NULL){
                instance = new Singleton();
            }
            mutex_.unlock();
        }
        return instance;
    }
private:
    Singleton(){}
    Singleton& operator =(const Singleton& ){}
    static Singleton *instance;
    static mutex mutex_;
};
int main(){
    Singleton* singleton = Singleton::getSingleton();
    return 0;
}

您应该将此静态字段定义为 *.cpp文件

class Singleton{
public:
    static Singleton* getSingleton(){
        if(instance == NULL){
            mutex_.lock();
            if(instance == NULL){
                instance = new Singleton();
            }
            mutex_.unlock();
        }
        return instance;
    }
private:
    Singleton(){}
    Singleton& operator =(const Singleton& ){}
    static Singleton *instance;
    static mutex mutex_;
};
mutex Singleton::mutex_;
Singleton * Singleton::instance;

如果您使用Singleton Myers和C 11:

,可以删除互斥X
class Singleton {
public:
    static Singleton& Instance() {
        static Singleton S;
        return S;
    }
private:
    Singleton();
    ~Singleton();
};

相关内容

最新更新