class 成员函数中静态变量的定义
definition of static variable inside a class member function
我正在学习单例设计模式并遇到了这段代码
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_
都是Singletonclass的成员,它们可以通过GetInstance
方法访问。所以我的问题是:这两个定义行可以去掉吗?
不,它们不能被移除,但它们可以移动到方法的局部静态变量中。
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_;
}
另请注意,初始化静态变量不需要守卫。编译器为你做。 局部静态变量初始化在C++11中是线程安全的吗? [复制]
Singleton *Singleton::GetInstance(const std::string& value)
{
static Singleton* pinstance_ = new Singleton(value);
return pinstance_;
}
我正在学习单例设计模式并遇到了这段代码
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_
都是Singletonclass的成员,它们可以通过GetInstance
方法访问。所以我的问题是:这两个定义行可以去掉吗?
不,它们不能被移除,但它们可以移动到方法的局部静态变量中。
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_;
}
另请注意,初始化静态变量不需要守卫。编译器为你做。 局部静态变量初始化在C++11中是线程安全的吗? [复制]
Singleton *Singleton::GetInstance(const std::string& value)
{
static Singleton* pinstance_ = new Singleton(value);
return pinstance_;
}