【发布时间】:2015-12-24 20:03:25
【问题描述】:
我刚刚读到,这个结构:
const bg::AppSettings& bg::AppSettings::GetInstance()
{
static AppSettings instance;
return instance;
}
是创建单例的线程安全且有效的方法吗?!我是否正确,每次调用此方法时静态 AppSettings 变量都是相同的?!我对这个范围的界定有点困惑......
我的正常方法是使用 unique_ptr 作为我班级的静态成员......但这似乎有效......有人可以向我解释一下,这是怎么回事?!
顺便说一句:const 在这里有意义吗?!
【问题讨论】:
-
是的。它是线程安全的。另外,请注意,实例将在第一次调用 GetInstance() 时被初始化,而不是在程序启动时。在某些情况下,这可能是不受欢迎的行为。
-
所以如果我是正确的:“实例”是在函数第一次被调用时创建的,不需要任何互斥锁。如果是这样,那么这太简单了 x_X 编辑:啊,你更快安德烈 :) 我猜对于一个从文件中读取设置的简单 AppSettings 类,没关系......我希望......
-
因为标准保证了它。你有足够的理由吗?
-
@Isaac,不是真的,正如 Howard Hinnat 所说:Visual Studio 直到 VS-2015 才实现 C++11 的这一方面。
标签: c++11