복사생성자가 아닌 기본생성자가 호출되는 이유가 뭔가요?

dltkddyd의 이미지

Time 클래스에 AddTime 멤버함수가 다음과 같이 선언돼 있습니다.

const Time AddTime(const Time& T) const;

그리고 본문 코드에 다음과 같이 진술문은 언급했습니다.

Time C=A.AddTime(B);

여기서 C에 반환값이 대입되는 순간에 복사생성자가 호출돼야할 것으로 생각했는데, 기본생성자가 호출됩니다. 물론 복사생성자는 클래스에 정의해놨고요. 복사생성자가 호출돼야하는거 아닌가요?

HDNua의 이미지

1. 잘 됩니다.

#include <iostream>
using namespace std;
 
class Object {
 int value;
public:
 Object(int value): value(value) { printf("constructor\n"); }
 Object(const Object& object) { printf("copy constructor\n"); }
 const Object method(const Object& object) const {
  printf("methods start\n");
  const Object o = object; // copy constructor 1
  printf("method end\n");
  return o; // 반환 시에 임시 변수를 생성하면서 copy constructor 호출 (2)
 }
};
 
int main() {
 Object a(10); // constructor 1
 Object b(20); // constructor 2
 Object c = a.method(b); // copy constructor 3
 return 0;
}

저는 이렇게 생각했습니다.