最近我看到了一段代码如下:
namespace {
mutex* get_server_factory_lock() {
static mutex server_factory_lock;
return &server_factory_lock;
}
typedef std::unordered_map<string, ServerFactory*> ServerFactories;
ServerFactories* server_factories() {
static ServerFactories* factories = new ServerFactories;
// is variable factories assigned every time this function called ?
return factories;
}
} // namespace
/* static */
void ServerFactory::Register(const string& server_type,
ServerFactory* factory) {
mutex_lock l(*get_server_factory_lock());
if (!server_factories()->insert({server_type, factory}).second) {
LOG(ERROR) << "Two server factories are being registered under "
<< server_type;
}
}
函数server_factories()
似乎与单身人士相似
我的问题是:据我所知,factories
是一个静态变量,每次调用函数server_factories()
时,这个静态变量都会被赋予一个新值。但结果不是,每次调用server_factories()
时,它都会返回相同的指针。为什么呢?
PS:编译时启用了c ++ 11。
与What is the lifetime of a static variable in a C++ function?
重复答案 0 :(得分:2)
它是静态的,所以当你第一次进入函数时,它只被初始化一次。稍后对同一函数的调用使用前一个变量。也就是说,我不明白为什么它是一个指针而不是一个简单的函数静态变量(具有自动存储持续时间),我们可以采用...的地址。