仅包含可移动 std::map 的 class 的移动构造函数不起作用
Move constructor of class containing only movable std::map not working
我有一个包含 std::map<int, std::mutex>
的 class,但我无法为其定义移动构造函数。 std::mutex
不可复制也不可移动,但 std::map
的移动构造函数仍然有效,因为它不需要其类型可复制或可移动:
std::map<int, std::mutex> map1;
std::map<int, std::mutex> map2{std::move(map1)}; //this compiles without warnings
但是我有一个 class 包含这样的地图:
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
没有复制构造函数。
那么这个 class 的移动构造函数在哪里调用 std::mutex 的复制构造函数,这是如何避免的?
PS:我知道这个 class 没有意义,但这只是一个简单的可验证示例,源自我的实际 class.
您假定的移动构造函数采用 const
右值引用。 om
无法修改,这意味着它的成员无法移动。只需放下 const
我有一个包含 std::map<int, std::mutex>
的 class,但我无法为其定义移动构造函数。 std::mutex
不可复制也不可移动,但 std::map
的移动构造函数仍然有效,因为它不需要其类型可复制或可移动:
std::map<int, std::mutex> map1;
std::map<int, std::mutex> map2{std::move(map1)}; //this compiles without warnings
但是我有一个 class 包含这样的地图:
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
没有复制构造函数。
那么这个 class 的移动构造函数在哪里调用 std::mutex 的复制构造函数,这是如何避免的?
PS:我知道这个 class 没有意义,但这只是一个简单的可验证示例,源自我的实际 class.
您假定的移动构造函数采用 const
右值引用。 om
无法修改,这意味着它的成员无法移动。只需放下 const