C에선 변수, 포인터 두 종류가 있는데
C++ 에선 여기에 레퍼런스 타입이 추가 됐음
근데 C++ 이 언어 설계를 ㅂㅅ같이 한건지 모르겠지만
Test t1;
Test t2 = t1;
을 하게 된다몃 t2 에 t1 의 복사 생성자가 호출되고
이 복사 생성자는 디폴트가 "딥 카피"임
자바에선 포인터를 넘기는거랑 다르게 작동하는거지 ㅇㅇ
그래서 이 병신같은 문제를 해결하기 위해
아 t1 을 rvalue라는 걸로 타입캐스팅을 하면 포인터만 복사하게 하면 되겠구나! 라고 해서
C에선 Test* t_ptr 로 끝날 문제를 Test&& 라는 병신같은 타입이 추가 되었고
이게 갤 떡밥으로 불타고 있다는거 맞지?
C++ 에선 여기에 레퍼런스 타입이 추가 됐음
근데 C++ 이 언어 설계를 ㅂㅅ같이 한건지 모르겠지만
Test t1;
Test t2 = t1;
을 하게 된다몃 t2 에 t1 의 복사 생성자가 호출되고
이 복사 생성자는 디폴트가 "딥 카피"임
자바에선 포인터를 넘기는거랑 다르게 작동하는거지 ㅇㅇ
그래서 이 병신같은 문제를 해결하기 위해
아 t1 을 rvalue라는 걸로 타입캐스팅을 하면 포인터만 복사하게 하면 되겠구나! 라고 해서
C에선 Test* t_ptr 로 끝날 문제를 Test&& 라는 병신같은 타입이 추가 되었고
이게 갤 떡밥으로 불타고 있다는거 맞지?
아니
다시 읽어보니까 컨셉같은데 ㅅㅂㅋㅋ
디폴트 복사 이동 모두 shallow임
근데 복사를 deep으로 만든다거나 스마트포인터마냥 소유권을 구현하고 싶다거나 할 때 쓰이는거
자바같이 gc 있는 언어들은 이런거 신경쓸 필요가 없긴함
응 복사생성자가 묵시적으로 호출되는데 복사가 필요할때도 있고 아닐때도 있는데 이걸 자료형으로 구분할 수 있다면 함수 오버로딩으로 경우를 나눠서 해결할 수 있으므로 rvalue reference라는걸 추가해서 쓰는거임 std::move라는건 이름과 달리 사실 move같은건 없고 그런 오버로딩에 적용할 수 있게 걍 자료형을 형변환만 해줌