代码之家  ›  专栏  ›  技术社区  ›  MiP

如何导出包含“std::unique\u ptr”值的“std::map”属性的类

  •  -2
  • MiP  · 技术社区  · 6 年前

    Cat 具有属性std::map的类 info

    #ifdef LIB_EXPORT
    #define LIB_API __declspec(dllexport)
    #else
    #define LIB_API __declspec(dllimport)
    #endif
    
    // Works!
    class Dog {
        std::map<int, std::unique_ptr<int>> info;
    };
    
    // Compile errors
    class LIB_API Cat {
        std::map<int, std::unique_ptr<int>> info;
    };
    

    假设:客户机总是使用相同版本的std::unique\u ptr和 实例与DLL可能期望的相同。

    这个 Dog 类已成功编译,但是 类失败,出现3个错误:

    C2280“std::pair::pair(const std::pair&)”:尝试引用已删除的函数

    我应该怎么做才能出口 上课?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Matthieu Brucher    6 年前

    当visualstudio需要导出类时,它会实例化所有可能的内容。如果没有显式删除复制构造函数和复制赋值运算符,它也会尝试创建它们。

    不幸的是,成员变量 info 由于唯一指针,无法复制。所以当它试图导出类时,失败了。

    添加:

    Cat(const Cat&) = delete;
    Cat& operator=(const Cat&) = delete;
    

    你的类定义。