繁体   English   中英

static 变量在 class 成员 function 中的定义

[英]definition of static variable inside a class member function

我正在学习 singleton 设计模式并遇到了这段代码

class Singleton
{
    private:
        static Singleton * pinstance_;
        static std::mutex mutex_;
    protected:
        static Singleton *GetInstance(const std::string& value);
};


Singleton* Singleton::pinstance_{nullptr}; //can this line be removed?
std::mutex Singleton::mutex_; //can this line be removed?

Singleton *Singleton::GetInstance(const std::string& value)
{
    std::lock_guard<std::mutex> lock(mutex_);
    if (pinstance_ == nullptr)
    {
        pinstance_ = new Singleton(value);
    }
    return pinstance_;
}

由于pinstance_mutex_都是 Singleton class 的成员,因此可以通过GetInstance方法访问它们。 所以我的问题是:这两个定义行可以删除吗?

不,它们不能被删除,但可以移动到方法的本地 static 变量中。

class Singleton
{
    protected:
        static Singleton *GetInstance(const std::string& value);
};

Singleton *Singleton::GetInstance(const std::string& value)
{
    static Singleton* pinstance_{nullptr};
    static std::mutex mutex_;

    std::lock_guard<std::mutex> lock(mutex_);
    if (pinstance_ == nullptr)
    {
        pinstance_ = new Singleton(value);
    }
    return pinstance_;
}

另请注意,初始化 static 变量不需要保护。 编译器会为你做这件事。 C++11 中的本地 static 变量初始化线程安全吗? [复制]

Singleton *Singleton::GetInstance(const std::string& value)
{
    static Singleton* pinstance_ = new Singleton(value);
    return pinstance_;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM