복사 생성자가 호출되는 시점은?

복사 생성자가 호출되는 시점은 크게 세가지로 구분할 수 있다:

이들은 모두 다음의 공통점을 지닌다

“객체를 새로 생성해야 한다. 단, 생성과 동시에 동일한 자료형 의 객체로 초기화해야 한다”

메모리 공간의 할당과 초기화가 동시에 일어나는 상황!

먼저 메모리 공간이 할당과 동시에 초기화되는 상황을 나열해보자

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 아님
}

반환할 때 만들어진 객체는 언제 사라져요?

클래스 외부에서 객체의 맴버함수를 호출하기 위해 필요한 것은 다음 세가지 중 하나이다