함수와 참조, 복사생성자
1. c++에서 함수의 인자전달 방법
(1) call_by_value 작동과정
인수의 값을 전달함 -> 함수가 호출되면 매개 변수가 스택에 생성됨 -> 호출하는 코드에서 값을 넘겨줌
->호출하는 코드에서 넘어온 값이 매개 변수에 복사됨
*생성자와 소멸자의 비대칭 으로 실행되는 문제점이 있음.
(2) call_by_address 작동과정
인수의 주소를 전달 (함수의 매개 변수는 포인터 타입)
-> 함수가 호출되면 포인터 타입의 매개 변수가 스택에 생성됨
-> 호출하는 코드에서는 명시적으로 주소를 넘겨줌
* 호출하는 코드에서 넘어온 주소 값이 매개 변수에 저장됨
(3) call_by_reference 작동과정
함수의 매개 변수를 참조 타입으로 선언
*참조 매개 변수라고 부름(참조 매개 변수는 실인자 변수를 참조함)
*참조매개 변수의 이름만 생기고 공간이 생기지 않음
*참조 매개 변수는 실인자 변수 공간 공유
*참조 매개 변수에 대한 조작은 실인자 변수 조작 효과
2. 객체를 복사하는 코드
3. 객체복사시 복사 생성자가 실행됨.
(1) 얕은 복사 개념 :
객체의 멤버를 1:1로 복사함
*객체의 멤버 변수에 동적 메모리가 할당된 경우
사본은 원본 객체가 할당받은 메모리를 공유하는 문제 발생
(2) 깊은 복사 개념 :
객체의 멤버를 1:1로 복사함
* 객체의 멤버 변수에 동적 메모리가 할당된 경우
사본은 원본이 가진 메모리 크기 만큼 별도로 동적 할당하고
원본의 동적 메모리에 있는 내용을 사본에 복사함
* 완전한 형태의 복사라서 얕은 복사의 문제점인 사본과 원본이 메모리를 공유하는 문제가 없음
댓글
댓글 쓰기