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

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

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的函数,该函数返回Host并接受带有函数指针类型的未命名参数(不接收任何内容并返回NonCopyable)。

只需将其更改为Host h{NonCopyable()};即可。

09-09 18:55