ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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