【发布时间】:2020-10-03 20:00:18
【问题描述】:
考虑std::mutex。我明白为什么std::mutex 不应该是可移动的。但是它的复制构造函数被明确标记为已删除,但是我没有看到它的移动构造函数有这样的声明。那么为什么 cppreference 会说 std::mutex 不可移动呢?
根据文档 (https://en.cppreference.com/w/cpp/language/move_constructor),有许多未满足的先决条件会阻止隐式移动构造函数。但我找不到这个问题的原因。对于这个问题,我将不胜感激。
我真的不认为这个(en.cppreference.com/w/cpp/thread/mutex/~mutex) 是std::mutex 的用户定义析构函数。
【问题讨论】:
-
“有许多未满足的前提条件阻止了隐式移动构造函数。” - 你看的不够仔细。
mutex有一个用户定义的析构函数。 -
@SebastianRedl &TonyTannous 但是 std::mutex 没有非默认析构函数。你能给我一些提示吗? 你的意思是这个(en.cppreference.com/w/cpp/thread/mutex/~mutex)是用户定义的析构函数吗?我很震惊。
-
答案是它依赖于实现。并非所有实现都为互斥锁提供了一个简单的析构函数。
-
你仍在尝试做你不应该做的事情。互斥锁不是 C++ 对象。它是一个封装在 C++ 类中的内核对象。请遵守相应的限制。
-
@michael chourdakis 从他的角度来看,cppref 只显示了默认析构函数,因此他对为什么未将 move 标记为已删除感到困惑。
标签: c++ c++11 constructor copy-constructor