복사생성자가 아닌 기본생성자가 호출되는 이유가 뭔가요?
글쓴이: dltkddyd / 작성시간: 금, 2014/05/23 - 12:38오후
Time 클래스에 AddTime 멤버함수가 다음과 같이 선언돼 있습니다.
const Time AddTime(const Time& T) const;
그리고 본문 코드에 다음과 같이 진술문은 언급했습니다.
Time C=A.AddTime(B);
여기서 C에 반환값이 대입되는 순간에 복사생성자가 호출돼야할 것으로 생각했는데, 기본생성자가 호출됩니다. 물론 복사생성자는 클래스에 정의해놨고요. 복사생성자가 호출돼야하는거 아닌가요?
Forums:


답변
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; }저는 이렇게 생각했습니다.
댓글 달기