1. 깊은 복사를 대신 R-VALUE의 값을 복시하고, R-VALUE는 초기화.
2. 생성자와 R-VALUE 할당연산자를 구성해줘야 한다.
3. R-VALUE 레퍼런스 선언은 && 입니다.
class CA { int* pValue; public: CA() { pValue = NULL; } CA(CA& va) { if (this == &va) return; Alloc(); *pValue = *va.pValue; } CA(CA&& va) :pValue(va.pValue) { va.pValue = NULL; } CA& operator=(CA&& va) { pValue = va.pValue; va.pValue = NULL; return *this; } ~CA() { if (pValue) { delete pValue; } } void Alloc() { pValue = new int; *pValue = 100; } }; CA GetValue() { CA VALUE; VALUE.Alloc(); return VALUE; }
4. 상수는 호출 할 수 있지만, L-VALUE 인 경우, std::move 를 호출해야 한다.
void Test(int&& i)
{
}
'C++ > C++ 11 14 17' 카테고리의 다른 글
C++ 11 ENUM (0) | 2018.04.11 |
---|---|
auto keyword (0) | 2018.04.05 |
Aggregate and POD (0) | 2018.04.04 |
함수포인터, std::function (0) | 2017.04.19 |
Modern C++ [MS] (0) | 2016.12.28 |