https://channel9.msdn.com/Events/Cloud-OS-Launch-Wave/Cloud-OS-Launch-Wave-2013/melting02
1. R-value reference &&를 사용하여
임시 객체를 복사하는대신 이동시켜
빠르고 메모리를 절약할 수 있다.
MemoryBlock 데모
=>
코딩 패러다임 변화
- 컨테이너에 객체 대신 객체 포인터를 넣을 필요가 없다.
- 컨테이너를 반환하는 (자연스러운) 코드를 작성할 수 있다.
- R-value reference를 제대로 사용하기 위해 std::move 함수가 필요하다.
Person 데모
- 템플릿에서 R-value reference를 사용하려면 Perfect forwarding 개념이 필요하다.
유니버셜 레퍼런스(Universal Reference) T&&
일반 함수에서 템플릿 함수로 전달할 때와 템플릿 함수에서 일반 함수로 전달할 때 R-value reference는 R-value reference로, L-value reference는 L-value reference로 전달해야한다. 이를 Perfect forwarding이라하고 std:forward 함수가 필요하다.
[code language="cpp"]
class Person
{
public:
void setName(const string& newName) { _name = newName; }
void setName(string&& newName) { _name = std::move(newName); }
...
}
[/code]
=>
class Person
{
public:
template <typename T>
void setName(T&& newName) { _name = std::forward(newName); }
...
}