[C++] 묵시적 복사 생성

두비니

·

2019. 12. 5. 04:30

[C++] 묵시적 복사 생성

 


 

다음과 같은 코드는 개발자들이 복사생성자가 호출될 것을 충분히 예상할 수 있다.

 

Person daughter(father);	//복사 생성자를 명시적으로 호출하는 사례

 

그러나 위와 같은 경우를 제외하고 컴파일러가 복사 생성자를 자동으로 호출하는 경우가 있다.

 

 

 

 

 

1. 객체로 초기화하여 객체가 생성될 때

 

Person son = father;	//복사 생성자 자동 호출
Person son(father);		//자체 복사생성자 호출

 

다음의 두 코드는 서로 같은 역할을 한다.

 

 

하지만 아래의 코드는 다르다는점 명심하도록

 

Person son;
son = father;	//복사 생성자 호출되지 않음

 

이건 치환문이고, 위에 있는거는 다른거라고 한다....?

 

 

 

 

2. '값에 의한 호출'로 객체가 전달될 때

 

void f(Person person){		//매개변수 person이 생성될 때 복사생성자 생성
		...
}

Person father(1, "Kitae");
f(father);		//값에의한 호출로, father객체 전달

 

당연히 참조변수가 아니기때문에 복사생성자 사용.

 

 

 

3. 함수가 객체를 리턴할 때

 

Person g() {
	Person mother(2, "Jane");
    return mother; 	//mother의 복사본을 생성하여 복사본 리턴, 사본이 만들어 질 때 복사생성자 호출
}

g();