복사 생성자가 호출되는 시점은 크게 세가지로 구분할 수 있다:
이들은 모두 다음의 공통점을 지닌다
“객체를 새로 생성해야 한다. 단, 생성과 동시에 동일한 자료형 의 객체로 초기화해야 한다”
먼저 메모리 공간이 할당과 동시에 초기화되는 상황을 나열해보자
int num1 = num2;
SimpleFunc(num);
int SimpleFunc(int n)
{
return n;
}
위의 코드를 보면서 다음과 같이 의아해 할 수도 있다.
“정수를 반환하는데, 그 과정에서 메모리 공간이 할당된다고?”
“잘못된 설명 아닌가? 반환되는 값을 새로운 변수에 저장하는 것도 아니잖아!”
결론은 이러하다
“함수가 값을 반환하면, 별도의 메모리 공간이 할당되고, 이 공간에 반환 값이 저장된다(반환 값으로 초기화된다).”
‘복사 생성자의 호출’
void SimpleFuncObj(SoSimple ob)
{
ob.ShowData();
}
int main (void)
{
SoSimple obj(7);
SimpleFuncObj(obj); // ob의 복사 생성자가 호출된다. obj 아님
}
클래스 외부에서 객체의 맴버함수를 호출하기 위해 필요한 것은 다음 세가지 중 하나이다