如何导出包含具有std :: unique_ptr值的std :: map属性的类

时间:2018-11-04 10:47:08

标签: c++ visual-c++ dll

我有一个带有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_ptr,并且Cat实例的内存布局与DLL可能期望的相同。

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

  

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

我应该怎么做才能导出Cat类?

1 个答案:

答案 0 :(得分:1)

当Visual Studio需要导出类时,它将实例化所有可能的东西。如果未明确删除它们,它还将尝试创建一个复制构造函数和一个复制赋值运算符。

不幸的是,由于具有唯一指针,无法复制成员变量info。因此,当它尝试导出该类时,它将失败。

添加:

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

转到您的班级定义。