-
왜 c에는 이동 연산자가 없는가.뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 3. 01:23반응형
이동 의미론(move semantic)을 사용하다가 문득 든 생각은 왜 C에는 이동연산자가 없을까? 하는 질문이 생각났습니다. 나름대로의 해답을 도출했는데, stackOverflow에서도 비슷한 질문을 한 경우가 있어, 첨언하여 답변해보겠습니다.
우선 C++에서 "move semantic"은 임시 객체에 대해서 효율적인 이동이 가능하도록 하는 오버로딩 방법중 하나입니다. - 이를 생각해보지 못했는데, 이동 연산자 또한 함수 오버로딩의 일종이었습니다. 그렇다면 우선적으로 c 에서는 함수의 오버로딩이 허용되지 않기 때문에 쉽사리 답을 내릴 수 있습니다.
C 에서는 함수 오버로딩이 불가능하기 때문에, 만약 데이터 이동 함수를 작성하려면, Copy_Struct 처럼 앞에 Copy라고 명시적으로 이 함수가 Struct를 copy 하는 함수라고 나타내야 할겁니다.
그 다음, c++ 에서 이동을 하는 이유는 깊은 복사(Deep-Copy)가 불필요하게 되는 상황에서, 깊은 복사의 대안적 방법을 제시하는 것입니다. 그런데 C에서는 Deep-Copy라는 개념이 존재하지 않습니다. 따라서, 이러한 상황이 C에서는 일어나지 않는다고 할 수 있습니다. C에서는 얕은 복사(Shallow Copy) 만을 사용하기 때문에, 데이터를 옮기려면 memcpy와 같은 방법을 사용해야 합니다. 따라서 C에서는 기본적으로 move 와 비슷한 데이터 이동을 한다고 할 수 있습니다.
- 위에 첨언하자면, c++에서 call-by-value 로 값이 전달되었을때, copy-constructor가 불려지게 되는데, C에서는 애초에 copy-constructor라는 개념이 없습니다. 객체를 가지고 있는 포인터만이 있을뿐입니다. 따라서 기본적으로 shallow-copy가 일어나게 됩니다.
반응형https://stackoverflow.com/questions/43270305/is-move-semantics-in-c-something-c-is-missing
글을 정리하고 나니, 이동연산자에 대해서 조금 더 깊은 정리를 할 수 있는 거 같습니다.
긴 글 읽어주셔서 감사합니다.
도움이 되셨거나, 잘못된 내용이 있다면 댓글 부탁드립니다.
반응형'뜯고 또 뜯어보는 컴퓨터 > 씨쁠쁠 C++' 카테고리의 다른 글
[객체의 관계] Is-A 그리고 Has-A 관계 ! (0) 2022.11.08 [c++] 상속을 어떻게 멈출 수 있을까 ? (0) 2022.11.06 Vtable - 어디에 존재하는가.. (0) 2022.11.03 Overloading 오버로딩 - 연산자 (0) 2022.11.02 Shared_ptr 내부 구조 & 주의점 (0) 2022.10.26