ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 복사생성자의 호출시점
    @ 16. 1 ~ 17. 1/C++ 2013. 1. 1. 19:13

    복사생성자가 호출되는 시점은 3가지로 구분할 수가 있다.

    1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화하는 경우

    2. 객체를 인자로 전달하는 경우

    3. 객체를 반환하되, 참조형으로 반환하지 않는 경우

     

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

     

    메모리 공간이 할당과 동시에 초기화되는 상황

    1. int num1=num2; // 할당과 동시에 초기화

     

    2.

    int Func(int n){}

    int main()

    {
    int num=10;

    Func(10); //호출되는 순간 매개변수 n이 할당과 동시에 초기화

    }

     

    3.

    int Func(int n){ return n;} // 반환하는 순간 메모리 공간이 할당되면서 동시에 초기화

    int main()

    {
    int num=10;

    cout << Func(num) << endl;

    }

    값이 출력되기 위해선 그 값을 참조할 수 있어야 하고 참조가 가능하려면 메모리공간의 어딘가에 저장되어야 한다.

     

     

    객체도 다르지 않다.

    1.

    Object obj2=obj1; // obj2를 위한 메모리 공간이 할당되면서 초기화도 됨

     

    2.

    Object Funcobj(Object ob){}

    int main(){

    Object obj;

    Funcobj(obj);

    }

    Funcobj 함수가 호출되는 순간 매개변수로 선언된 ob를 위한 메모리 공간이 할당되고 이것은 인자로 전달되는 obj로 초기화가 이뤄진다.

     

    3.

    Funcobj(Object ob){
    return ob}

    return문이 실행되는 순간, Object객체를 위한 메모리 공간이 할당되고(임시객체), 이 공간에 할당된 객체는 반환되는 객체 ob의 내용으로 초기화가 된다.

     

    위의 초기화는 복사생성자의 호출 방식으로 된다.

     

    '@ 16. 1 ~ 17. 1 > C++' 카테고리의 다른 글

    Template (1) 함수 템플릿  (0) 2013.01.29
    비트연산자, 함수포인터, ctime  (0) 2013.01.27
    잊기전 정리..  (1) 2013.01.17
    파일 입출력 관련  (0) 2013.01.13
    const 이야기 1부  (0) 2012.12.26
Designed by Tistory.