# Language/C++

[C++] 값에 의한 호출, 참조에 의한 호출, 주소에 의한 호출



[C++] 값에 의한 호출, 주소에 의한 호출





값에 의한 호출(call by value)


코드에서 넘겨주는 인자 값이 함수의 매개 변수에 복사 되어 전달


매개변수에 복사 된 객체(값)이 스택에 생성되고 함수 실행 후 스택에서 사라지고, 함수 안에서 일어난 변화가 원본 객체(값)에 영향을 미치지 않는다.




유의할 점


객체를 매개 변수로 가지는 함수의 경우, C++ 컴파일러는 매개 변수 객체의 생성자는 실행되지 않고 소멸자만 실행

되도록 컴파일 한다.


복사 되는 객체의 상태를 잃어버리지 않기 위함!


이러한 비대칭 구조를 해결하기 위해 복사 생성자를 호출 하도록 함




참조에 의한 호출(call by reference) ★★★



함수의 매개 변수를 참조 타입으로 선언, 매개 변수가 호출 하는 쪽의 실인자를 참조하여 실인자와 공간을 공유하도록 하는 인자 전달 방식


참조 매개 변수는 스택에 공간을 할당 받지 않는다.


함수의 원형에 의해 구분


코드의 가독성 높임, 간단한 사용


이름만 생성되기에 객체 전달 시에 생성자와 소멸자 모두 실행 안됨.




주소에 의한 호출(call by address)


원본 객체를 복사하는 시간 소모가 없으며, 비대칭 문제가 없다.


매개 변수 포인터로 원본 객체를 훼손할 가능성이 존재!


728x90

'# Language > C++' 카테고리의 다른 글

[C++] char, char*, char& 비교  (0) 2019.01.21
[C++] 참조  (0) 2019.01.20
[C++] string  (0) 2019.01.16
[C++] this 포인터  (0) 2019.01.15
[C++] 메모리 누수 (memory leak)  (0) 2019.01.15
[C++] 동적 메모리 할당, 반환 ( new, delete 연산자)  (0) 2019.01.15
[C++] 객체 배열  (0) 2019.01.15