함수와 참조, 복사생성자

 1. c++에서 함수의 인자전달 방법


  (1) call_by_value 작동과정 

인수의 값을 전달함 -> 함수가 호출되면 매개 변수가 스택에 생성됨 -> 호출하는 코드에서 값을 넘겨줌

->호출하는 코드에서 넘어온 값이 매개 변수에 복사됨

 *생성자와 소멸자의 비대칭 으로 실행되는 문제점이 있음.


  (2) call_by_address 작동과정 

인수의 주소를 전달 (함수의 매개 변수는 포인터 타입) 

-> 함수가 호출되면 포인터 타입의 매개 변수가 스택에 생성됨 

-> 호출하는 코드에서는 명시적으로 주소를 넘겨줌

  * 호출하는 코드에서 넘어온 주소 값이 매개 변수에 저장됨


  (3) call_by_reference 작동과정

함수의 매개 변수를 참조 타입으로 선언

*참조 매개 변수라고 부름(참조 매개 변수는 실인자 변수를 참조함)

*참조매개 변수의 이름만 생기고 공간이 생기지 않음

*참조 매개 변수는 실인자 변수 공간 공유

*참조 매개 변수에 대한 조작은 실인자 변수 조작 효과

 

2. 객체를 복사하는 코드




 


3. 객체복사시 복사 생성자가 실행됨.


 (1) 얕은 복사 개념 : 

객체의 멤버를 1:1로 복사함

  *객체의 멤버 변수에 동적 메모리가 할당된 경우

   사본은 원본 객체가 할당받은 메모리를 공유하는 문제 발생


  (2) 깊은 복사 개념 :

객체의 멤버를 1:1로 복사함

  * 객체의 멤버 변수에 동적 메모리가 할당된 경우

    사본은 원본이 가진 메모리 크기 만큼 별도로 동적 할당하고

    원본의 동적 메모리에 있는 내용을 사본에 복사함


  * 완전한 형태의 복사라서 얕은 복사의 문제점인 사본과 원본이 메모리를 공유하는 문제가 없음


댓글

이 블로그의 인기 게시물

HTML 특정 위치로 링크 걸기

객체포인터와 객체배열, 객체의 동적생성

듀얼쇼크3/Sixaxis PC에서 사용하기 - Windows 7 64bit 지원