Перемещение значения в классе
Я просматривал некоторое время в поисках ответа, но, похоже, не нашел его. Поэтому я решил специально задать вопрос здесь.
Я пытался использовать что-то вроде этого (и варианты этого):
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()};
,