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



我有一个带有Cat类的lib,该类具有属性std::mapinfo:

#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::成对&(":试图引用已删除的函数

要导出Cat类,我应该做什么?

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

遗憾的是,由于存在唯一指针,无法复制成员变量info。因此,当它试图导出类时,它失败了。

添加:

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

根据您的类定义。

最新更新