c++ - 使用 unique_ptr 作为值初始化静态 std::map

标签 c++ c++11 initialization unique-ptr

如何初始化静态映射,其中值为 std::unique_ptr

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

当然这是行不通的(std::unique_ptr 的复制构造器被删除)。

这可能吗?

最佳答案

问题是从 std::initializer-list 构建复制其内容。 (std::initializer_list 中的对象本质上是 const)。 要解决您的问题:您可以从一个单独的函数初始化 map ...

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;
}

然后调用它

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

查看Live On Coliru

关于c++ - 使用 unique_ptr 作为值初始化静态 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213088/

相关文章:

c++ - 从函数返回 Boost 分布生成器以在 C++ 中填充 vector

c++ - Visual Studio 2015 认为 Windows 10 是 Windows XP 之前的版本

c++ - 什么容器来存储没有运算符<定义的唯一值

c++ - 不打印带有 int 的字符串构造函数

c - C 中已声明但未初始化的变量会发生什么情况?它有值(value)吗?

javascript - 从不同的节点插件方法多次调用 JS 函数

c++ - 在非实例化函数模板中用作默认参数的不存在标识符

c++ - 检查循环条件是否应该计入比较总数?

c - 初始化 Valgrind 错误

c++ - 使用指针复制构造函数