-
[C++] 복사생성자의 호출시기C++ 2022. 12. 30. 15:07
1. 기존에 생성된 객체를 이용해서 새로운 객체를 생성과 동시에 초기화할때
Human ThomasTuchel; Human jhmin = ThomasTuchel;
jhmin 을 ThomasTuchel 이란 객체로 생성과 동시에 초기화하고 있음
"새로 생성하는 객체에 기존에 생성된 객체를 대입"할때 복사생성자 호출
참고로 "기존에 생성된 두 객체간"의 대입연산 시에는
연산자 오버로딩을 통한 대입연산자 ( operator= ) 이 호출된다
기존꺼로 기존꺼를 대입연산으로 초기화하는거랑
기존꺼로 새로운 객체를 생성과 동시에 초기화하는거랑 구분을 잘해줘야함
2. Call-by-value 방식의 함수호출과정에서 객체를 인자로 전달하는 경우
함수의 매개변수도 함수가 호출되는 순간 메모리 공간이 할당되고 초기화된다.
Human(const Human &temp){ // code } Human SimpleFunc(const Human& temp){ // code } Human(ThomasTuchel) SimpleFunc(ThomasTuchel)
인자로 객체를 전달하고 있다.
매개변수에 대입되면서 1번과 같은 상황이 연출됨
3. 객체를 반환할때(참조형X)
함수의 반환값으로 반환된 값은 메모리가 할당되어 저장된다.
return ThomasTuchel; return jhmin;
이 경우가 가장 직관적으로 와닿지 않는 상황이다.
이때 객체가 반환되는데 이는 "임시객체"이다.
따라서 이 임시객체가 해당 반환값으로 초기화될때 복사생성자가 호출된다!
이 세 가지의 공통점은 객체를 새로 생성함과 동시에 객체로 초기화 해야한다! 이다.
'C++' 카테고리의 다른 글
[C++] 상속(2) - 간단한 예시 (1) 2022.12.31 [C++] 상속(1) - 개념 (0) 2022.12.31 [C++] 복사생성자(copy constructor) (0) 2022.12.27 [C++] 생성자(constructor) (0) 2022.12.26 [C++] class (0) 2022.12.24