带有new的静态变量的c ++单例

时间:2016-06-21 14:18:48

标签: c++ c++11 static singleton

最近我看到了一段代码如下:

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?

重复

1 个答案:

答案 0 :(得分:2)

它是静态的,所以当你第一次进入函数时,它只被初始化一次。稍后对同一函数的调用使用前一个变量。也就是说,我不明白为什么它是一个指针而不是一个简单的函数静态变量(具有自动存储持续时间),我们可以采用...的地址。