2

我正在使用 MS Visual Studio 2019。

我有以下内容:

struct MyClass
{
    std::vector<int> ints{};
    std::map<int, int> map{};
};

struct MyMoveOnly
{
    MyClass obj{};
    MyMoveOnly() noexcept = default;
    ~MyMoveOnly() noexcept = default;
    MyMoveOnly(const MyMoveOnly&) = delete;
    MyMoveOnly(MyMoveOnly&& other) noexcept = default;
    MyMoveOnly& operator=(const MyMoveOnly& other) = delete;
    MyMoveOnly& operator=(MyMoveOnly&& other) noexcept = default;
};

在我的主要工作中,我尝试按以下方式进行操作:

MyMoveOnly a{};
MyMoveOnly b = std::move(a);

如果我在 MyClass 中注释掉地图,这样它就可以正常工作,所以它只有一个向量。但是使用地图时,我在尝试编译时收到此错误: 'MyMoveOnly::MyMoveOnly(const MyMoveOnly &)':尝试引用已删除的函数

std::map 是可移动的,所以我不明白为什么会发生这种情况。这是正确的行为还是我发现了一个错误?

4

0 回答 0