얕은 복사 깊은 복사라는 개념 자체는 언어에 무관하지 않나. move constructor는 C++에서 그걸 위해 지원하는 특정 기능 이름이니까 당연히 다른 언어에 없는거고.
이읗(attltb2)2022-09-06 17:46
답글
이건 복사가 아니라 이동임. 임시변수를 만드냐 아니냐의 차이
익명(223.38)2022-09-06 17:50
c는 이동마저도 비싸다고 생각해서 그냥 포인터넘김
익명(106.101)2022-09-06 18:31
move 개념 이전에 깊은복사 얕은복사 얘기임 - dc App
익명(220.79)2022-09-06 18:55
"이동" 이라는 개념 자체는 C에도 있음 단 C++에만 Move 있다고 하는 건, 저 이동을 언어 차원에서 std::move(rvalue reference)으로 쉽게 나타낼 수 있기 때문임. c++ 보면 std::move은 따로 특별한 동작이 있는 게 아니라, 단지 "이동 가능하다" 라고 타입 캐스팅 해 주는 것 뿐임
익명(123.254)2022-09-06 19:22
답글
C에서라면 struct aa{struct bigobj* o;}가 있을 때, void copy(struct aa* a, struct aa* dist) {memcpy(dist->o, a->o, sizeof(struct aa));} 하는 함수하고 void copy_move(struct aa* a, struct aa* dist){dist->o = a->o; a->o = 0;} 이렇게 함수 2개를 만들 수 있을거임. 그런데 이러면 다른 이름으로 함수 2개 만들어야 하다보니 생성자 같은 곳에는 사용하기 어렵고, 타입 같은걸로 강제하는게 아니다보니 실수가 생길수도 있음 (이동하면 안되는데 이동, 이동해야 하는데 복사 등)
익명(123.254)2022-09-06 19:27
답글
그래서 C++ 에서는 std::move와 &&를 이용해서 void copy(aa& a, aa& dist){...}, void copy(aa&& a, aa& dist){...} 이런 식으로 만들고, copy(a, b) 이면 깊은복사, copy(std::move(a), b) 이면 얕은복사 이렇게 할 수 있게 만든거
없으니까 안 가르치지
메모리 이동 함수도 있는데 move를 못해?
없어서 못함. 필요하면 비슷한 함수 만들어서 써
Move 하려는 목적이 뭔데 - dc App
얕은 복사 깊은 복사라는 개념 자체는 언어에 무관하지 않나. move constructor는 C++에서 그걸 위해 지원하는 특정 기능 이름이니까 당연히 다른 언어에 없는거고.
이건 복사가 아니라 이동임. 임시변수를 만드냐 아니냐의 차이
c는 이동마저도 비싸다고 생각해서 그냥 포인터넘김
move 개념 이전에 깊은복사 얕은복사 얘기임 - dc App
"이동" 이라는 개념 자체는 C에도 있음 단 C++에만 Move 있다고 하는 건, 저 이동을 언어 차원에서 std::move(rvalue reference)으로 쉽게 나타낼 수 있기 때문임. c++ 보면 std::move은 따로 특별한 동작이 있는 게 아니라, 단지 "이동 가능하다" 라고 타입 캐스팅 해 주는 것 뿐임
C에서라면 struct aa{struct bigobj* o;}가 있을 때, void copy(struct aa* a, struct aa* dist) {memcpy(dist->o, a->o, sizeof(struct aa));} 하는 함수하고 void copy_move(struct aa* a, struct aa* dist){dist->o = a->o; a->o = 0;} 이렇게 함수 2개를 만들 수 있을거임. 그런데 이러면 다른 이름으로 함수 2개 만들어야 하다보니 생성자 같은 곳에는 사용하기 어렵고, 타입 같은걸로 강제하는게 아니다보니 실수가 생길수도 있음 (이동하면 안되는데 이동, 이동해야 하는데 복사 등)
그래서 C++ 에서는 std::move와 &&를 이용해서 void copy(aa& a, aa& dist){...}, void copy(aa&& a, aa& dist){...} 이런 식으로 만들고, copy(a, b) 이면 깊은복사, copy(std::move(a), b) 이면 얕은복사 이렇게 할 수 있게 만든거
참조연산자 때문에 일어나는 병신같은 현상임 참조가 C++ 말아먹음
유니버셜레퍼런스 퍼펙트 퍼워딩만 써야지