gpt4 book ai didi

c++ - 移动仅包含可移动 std::map 的类的构造函数不起作用

转载 作者:行者123 更新时间:2023-12-02 09:53:07 24 4
gpt4 key购买 nike

我有一个包含 std::map<int, std::mutex> 的类并且不知何故我无法为它定义一个移动构造函数。 std::mutex不可复制也不可移动,而是 std::map 的移动构造函数仍然有效,因为它不需要其类型是可复制或可移动的:

std::map<int, std::mutex> map1;
std::map<int, std::mutex> map2{std::move(map1)}; //this compiles without warnings
但是我有一个包含这样一个 map 的类:
class OnlyMovable{
std::map<int, std::mutex> map;
public:
OnlyMovable(const OnlyMovable&& om) : map{std::move(om.map)} //somehow requires copy-ctor of mutex
{}
};
这里 gcc 给了我一个巨大的错误信息,最后它提示 std::mutex没有复制构造函数。
那么这个类的移动构造函数在哪里调用 std::mutex 的复制构造函数,这是如何避免的呢?
PS:我知道这个类没有意义,但它只是一个从我的实际类派生的简单可验证示例。

最佳答案

您假定的移动构造函数采用 const右值引用。 om不能被修改,这意味着它的成员不能被移动。直接放下const

关于c++ - 移动仅包含可移动 std::map 的类的构造函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62733451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com