在 class 成员内移动右值

Moving rvalue inside class member

我浏览了一段时间以寻找答案,但似乎没有找到。所以我决定在这里专门问这个问题。

我一直在尝试使用类似这样的东西(及其变体):

struct NonCopyable
{
    NonCopyable() { };
    NonCopyable(const NonCopyable& other) = delete;
    NonCopyable(NonCopyable&& other) {  };
};

struct Host
{
    Host(NonCopyable&& nc) : m_nc(nc) { }
    NonCopyable m_nc;
};

实现这个:

Host h(NonCopyable());

换句话说,我想在 m_nc 中构造 NonCopyable。这完全可能吗?

注意nc是一个左值作为命名参数,您需要将其转换为右值,例如通过 std::move

Host(NonCopyable&& nc) : m_nc(std::move(nc)) { }

编辑

有一个 most vexing parse 问题。 Host h(NonCopyable());不是变量定义,而是函数声明;它声明了一个名为 h 的函数,其中 returns Host 并采用函数指针类型的未命名参数(不带任何参数和 returns NonCopyable)。

改成Host h{NonCopyable()};就可以了。