Перемещение значения в классе

Я просматривал некоторое время в поисках ответа, но, похоже, не нашел его. Поэтому я решил специально задать вопрос здесь.

Я пытался использовать что-то вроде этого (и варианты этого):

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());

Другими словами, я хотел бы создать NonCopyable внутри m_nc. Это вообще возможно?

1 ответ

Решение

Обратите внимание, что nc является lvalue в качестве именованного параметра, вам нужно преобразовать его в rvalue, например, через std::move

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

РЕДАКТИРОВАТЬ

Есть самая неприятная проблема с разбором. Host h(NonCopyable()); не определение переменной, а объявление функции; который объявляет функцию с именем h, который возвращает Host и принимает безымянный параметр с указателем типа функции (который ничего не берет и возвращает NonCopyable).

Просто измените это на Host h{NonCopyable()};,

Другие вопросы по тегам