[명품 C++ Programming] chapter 5 : 함수와 참조, 복사 생성자(1) - 함수의 인자 전달과 객체 전달

eunee22·2023년 8월 20일

명품 C++ Programming

목록 보기
19/34

제가 대학교 1학년 때 [명품 C++ Programming] 교재로 진행되는 C++ 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다.
(2022.9 ~ 2022.12)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.

🍑함수의 인자 전달 방식

값에 의한 호출

  • 함수가 호출되면 매개변수가 스택에 생성
  • 호출하는 코드에서 넘겨주는 실인자 값이 함수의 매개변수에 복사되어 전달

  • 장점
    • 함수내에서 실인자를 손상 불가 → 함수 호출에 따른 부작용X

주소에 의한 호출

  • 함수가 호출되면 포인터 타입의 매개변수가 스택에 생성
  • 호출하는 코드에서 주소를 직접 포인터 타입의 매개 변수에 전달 받음
    • 기본 타입 변수나 객체의 경우 주소 전달
    • 배열의 경우 배열의 이름(=배열의 주소) 전달
  • 의도적으로 함수내에서 실인자의 값을 변경하고자 할 때 이용됨

🍑함수 호출시 객체 전달

  • 기본 타입과 객체를 전달하는 것은 여러 가지 면에서 다름

값에 의한 호출로 객체 전달

  • 함수를 호출하는 쪽에서 객체 이름만 사용하여 객체 전달
    함수이름(객체이름);

  • 함수의 매개 변수 객체를 생성하면, 매개 변수 객체의 공간이 스택에 할당되고, 호출하는 쪽의 객체가 매개 변수 객체에 그대로 복사

  • 매개 변수 객체의 생성자는 호출되지 않는 반면, 매개 변수 객체의 소멸자는 호출됨 → 비대칭 실행 구조 (단, 복사생성자는 호출)

  • 호출되는 순간의 실인자 객체 상태(전달받은 원본의 상태)를 매개 변수 객체에 그대로 전달하기 위해 매개변수 객체의 생성자가 실행되지 않음.

  • 객체 생성시 다른 객체의 값으로 초기화 되는 경우 복사생성자에 의한 객체 초기화

    • 클래스 이름 객체 이름 = 객체 이름;
    • 함수의 매개변수로 객체가 전달

단점

실인자 객체의 크기가 크면 객체의 복사 시간이 커짐

장점

매개 변수 객체에 변화가 일어나고 실인자를 훼손시키지 않음

주소에 의한 호출로 객체 전달

  • 함수의 매개 변수를 객체에 대한 포인터로 선언
  • 함수 호출 시 생성자 소멸자가 실행되지 않는 구조
  • 함수 호출 시 매개변수에 &객체이름 형식으로 주소를 전달해야함

장점

  1. 원본 객체를 복사하는 시간 소모X
  2. 생성자 소멸자의 비대칭 문제X

단점

본 객체를 훼손할 가능성 존재

🍑객체 치환 및 객체 리턴

객체 치환

  • 객체의 모든 데이터가 비트 단위로 복사됨
  • 동일한 클래스 타입 끼리만 가능
  • 치환된 두 객체는 내용물만 같을 뿐 독립적 공간 유지(별개임)

함수의 객체 리턴

  • return 객체이름; 형식으로 리턴
  • return문이 실행되면 객체의 복사본이 생기고 함수를 호출한 곳으로 복사본이 전달된 다음에 객체는 소멸됨
profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글