아 헷갈리네 (사실 공부한적도 없음)
내가 저거 알게된게
class object를 local variable로 선언해서
return [rvalue]
rvalue자리로 리턴에 쓰일때
그때 무브컨스트럭터가 발생되던데
슈발... 암튼 학교에서 자료 구조 간단한 벡터 클래스 만들라햇을때
기본 사칙연산 오버로딩 만들때 rvalue로 생성해서 내줄때가잇으니가
예를들면 c = a + b 일때
a b의 값들은 변하면 안되고 c에 새로운값넣어줘야하니까
지역변수로 하나 클래스 만들어서 거기에 값계싼하고
그걸 return하는
그 과정에서 막 생성자가 세개엿나 두개엿나 만들어지는거보고 시발 왜이러지 햇는데
알고보니까 기본적으로 C+11이상에서는 movecontructor가 있다고 (맞나?)
암튼 그리고 저상황에서 move constructor가 호출된다고
근데 assingment 아님? c = [returned] 니까 ... 아몰랑 슈발
그래서내가 생각한게
c = (returned object) <- (returned from move ctor) <- returned from a+ operator overloading
맞음?
좆나 무슨 말인지 모르게 써놔서 뭐가 맞냐는건지 모르겠다. 일단 assignment ctor같은건 없고, copy constructor/move constructor가 있고, copy/move assignment가 있어
대입도 우측값 최적화 있으
kukyak // 글쓰면서 글목적이 다섯번은 바뀌어서그럼. assignment ctor가아니라 overloading잘못말햇네 암튼 메모리를 전체복사하는게아니라 이동하는 개념이잇네 예전에 책에서 int& a; 이런걸 그냥 포인터라고 생각하고넘어갔떤게 문제이었음... 더공부하고오겟음!!!
91후전역 // ㅇㅇ rvalue 참조라는게 있네!!! 아직 애매모호한데 더 공부하겟음!! 감사함!
글고 보통은 로컬 객체를 리턴해도 복사생성자가 호출되지 않는데 이거는 RVO(Return value optimization)이나 NRVO(Named RVO)로 검색하면 설명 많을거임
unique ptr구현보면 이해가 빠름 메모리의 오너십만 넘겨서 깊은복사를 얕은복사로 때움
이게 임시객체인지 아닌지 구분해서 싼 연산을 쓰는거고 move는 우측값으로 바꾸는 캐스팅정도로 보면 편함
kukyak // 마자 rvaule optimization이엿에 예전에 대2때 학교과제레포트쓰면서 구글링했을때 봣떤거네... 감사합니다! 공부열심히할게요..지금까지 프갤 개념글에서 또 공부하고 왔음.... -_- 공부할게 왜 이리 많은거죠?
91후 전역 // 맞음맞음 깊은복사 얕은복사. by value by reference 하고 전혀 다른 개념이지! 음.. 편하게 설명해줘서 고마움! 하지만 더 공부해보겟음!!!