복사 생성자와 이동 시맨틱에 대해 수많은 기사를 읽었습니다. 나는 일종의 '일종의'일을 이해하고있는 것처럼 느낀다. 그러나 많은 설명은 실제로 두포 (내가 혼란을 일으키는 원인이되는 것)에서 실제로 일어나고있는 것을 버린다. 실제로 객체와 메모리에 무슨 일이 벌어지고다음의 객체로 생성자와 시맨틱을 복사하십시오.
string b(x + y);
string(string&& that)
{
data = that.data;
that.data = 0;
}
: 예를 들어
? 따라서 어떤 객체가 'b'
이고 그 값은 x + y
이며 rvalue는 이동 생성자를 호출합니다. 이것은 정말로 나를 혼란스럽게 만들고 있습니다 ... 왜 그렇게합니까?
데이터를 복사하는 대신 '이동'하는 것이 좋다고 생각합니다.하지만 여기서 잃어버린 부분은 메모리 수준에서 각 객체/매개 변수에 어떤 일이 일어나는지를 함께 분석하려고 할 때입니다.
죄송합니다. 혼란 스러울 경우 이야기를해도 혼란 스럽습니다.
편집 :
가 요약하면, 나는 복사 생성자와 이동 생성자의 ... 난 그냥 이해하지 못하는 '이유'는 '어떻게'이해합니다.
메모리에 :'this.data'의 값을'this-> data'에 복사하고'that.data'를'0'으로 설정하십시오. "뒷이야기"가 없습니다. –
이것이 도움이 될만한 IDK이지만 * copy *는 다음과 같을 수 있습니다 :'char * b = new char [strlen (a) +1]; strcpy (b, a); 삭제 [] a; a = nullptr;'이고, * move *는'char * b = a; a = nullptr;'. 분명히 후자는 할당이 적으므로 그러한 의미를 원할 때 선호됩니다. –