Я новичок в понятиях rvalue reference
и std::move
. Я попытался создать std::map
, второй параметр шаблона которого является ссылкой на значение.
У меня есть этот DebugClass:
class DebugClass
{
public:
int num;
DebugClass() = delete;
DebugClass(const DebugClass& rhs) = delete;
DebugClass& operator=(const DebugClass& rhs) = delete;
DebugClass(int num) : num(num)
{
printf("constructor\n");
}
DebugClass(DebugClass&& rhs)
{
printf("move constructor\n");
this->num = rhs.num;
}
DebugClass& operator=(const DebugClass&& rhs)
{
printf("rvalue assignment\n");
this->num = rhs.num;
}
};
Вот как я его использую:
void foo(DebugClass&& dbgClass)
{
std::map<uint32_t, DebugClass&&> myMap;
myMap.insert(std::pair<uint32_t, DebugClass&&>(1, std::move(dbgClass)));
printf("%d\n", myMap[1].num);
}
int main()
{
foo(DebugClass(2));
}
Я хочу иметь возможность увидеть этот вывод:
constructor
move constructor
2
Но вместо этого я получаю ошибку компиляции:
Severity Code Description Project File Line Suppression State
Error C2832 'std::pair<const _Kty,_Ty>::second': a reference type cannot be value-initialized Tests c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\tuple 1304
Как мне переместить мои foo
параметр в myMap
?