간단 요약
값에 의한 전달
함수로부터 객체를 전달 받거나, 함수에 객체를 전달할 때 값에 의한 전달 방식을 사용한다
함수 매개 변수는 실제 인자의 '사본'을 통해 초기화된다.
함수 호출 시, 함수가 반환한 값의 '사본'을 전달 받음
예시 코드
class Person{
public:
Person();
virtual ~Person();
private:
std::string name;
std::string address;
};
class Student: public Person{
public:
Student();
~Student();
private:
std::string schoolName;
std::string schoolAddres;
};
bool validateStudent(Student s);
Student plato;
bool platoIsOk = validateStudent(plato);
plato 객체를 validateStudent(Student s);에 인자값으로 전달하였을 경우 코드 실행 과정
1. Person() 생성자 호출
2. Student() 생성자 호출
3. Person() 복사 생성자 호출
4. Student() 복사 생성자 호출
5. ~Student() 복사 소멸자 호출
6. ~Person() 복사 소멸자 호출
7. ~Student() 멸자 호출
8. ~Person() 소멸자 호출
총 1번의 생성자 호출, 2번의 소멸자 호출이 이뤄진다.
이렇게 값에 의한 참조는 중복적 생성자/소멸자 호출이 이뤄지기 때문에 비효율적일 수 있다.
상수객체에 대한 참조자로 전달
예시 코드
bool validateStudent(const Student& s);
값에 의한 전달이 효과적일 경우(저비용으로 그냥 쓰자는 마인드)