복사 생성자 3

C2678 : 이항 '~': 왼쪽 피연산자로 '~' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다.

~는 내가 쓰던 코드에서 선언한 타입이었다. ~에는 쓴 코드에서 사용한 연산자와 타입이 올 것이다. 에러에 관한 이야기를 하기 전에 짚고 넘어 가야 할 중요한 사실이 있는데 C++에서 const를 요구하는 인자에 non-const를 넘기는 것은 괜찮지만 non-const를 요구하는 곳에 const를 쓰면 에러가 생긴다(https://erlerobotics.gitbooks.io/erle-robotics-cpp-gitbook/content/advanced_topics_i/const_and_non-const.html) 예를 들어서 우리가 흔히 쓰는 복사 생성자는 인자로 const reference 타입을 받지만 인자로 넘겨줄 객체를 const로 선언하지 않아도 에러가 생기지 않는다. 예를 들어서 class A..

공부/그 외 2021.09.02

C++ return new(*this); 는 복사 생성자를 호출한다

프로젝트를 진행중에 prototype을 clone하는 코드를 작성해야 했는데 다음과 같은 방식으로 작성한 코드를 보았고 이게 과연 복사 생성자를 호출할지, 그냥 생성자를 호출할 지 궁금했다. CClass* CClass::Clone() { return new CClass(*this); } 내가 아는 복사 생성자의 호출 시기는 객체를 인자로 넘길 때 reference 형태가 아닌 value 형태로 넘길 때 객체를 값으로 반환할 때 객체를 생성과 동시에 기존에 존재하는 객체로 초기화 할 때 이렇게 3가지 인데, 저 3가지중에 어디에 해당되는지 확신이 없었다. 1, 2번은 당연히 아니고 3번이 의심돼서 아래와 같은 코드를 작성하고 직접 확인해보았다. //CClass.h class CClass { public: ..

공부/C || C++ 2021.08.17