使用unique_ptr作为值初始化static std :: map

vla*_*don 7 c++ initialization unique-ptr c++11

如何初始化静态地图,其中值是std::unique_ptr什么?

static void f()
{
    static std::map<int, std::unique_ptr<MyClass>> = {
        { 0, std::make_unique<MyClass>() }
    };
}
Run Code Online (Sandbox Code Playgroud)

当然这不起作用(std::unique_ptr删除copy-ctor ).

可能吗?

Whi*_*TiM 8

问题是从std::initializer-list复制其内容构建.(对象std::initializer_list本身就是const).要解决您的问题:您可以从单独的函数初始化地图...

std::map<int, std::unique_ptr<MyClass>> init(){
    std::map<int, std::unique_ptr<MyClass>> mp;
    mp[0] = std::make_unique<MyClass>();
    mp[1] = std::make_unique<MyClass>();
    //...etc
    return mp;
}
Run Code Online (Sandbox Code Playgroud)

然后打电话给它

static void f()
{
    static std::map<int, std::unique_ptr<MyClass>> mp = init();
}
Run Code Online (Sandbox Code Playgroud)

看到Live On Coliru