-
Effective C++...19일지 2022. 6. 21. 07:58
'값에 의한 전달'보다는 '상수 객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다
값에 의한 전달이 문제가 되는 이유
기본적으로 값에 의한 전달은 복사 생성자가 호출되게 된다.
그런데 상속받은 클래스이고 내부에 멤버 변수가 많다면 그만큼 복사 생성 호출이 늘어나게 된다.
다음의 경우에 함수 호출 한 번에 생성자, 소멸자가 각각 여섯 번씩 호출된다.
class Person {
private:
std::string name;
std::string address;
};
class Student : public Person {
private:
std::string schoolName;
std::string schoolAddress;
};
bool validateStudent(Student s);
Student plato;
bool platoIsOK = validateStudent(plato);
참조에 의한 호출 시 이점
소멸자, 생성자를 비효율적으로 호출하지 않는 것 외에도 복사 손실 문제*를 방지할 수 있다는 장점이 있다.
* 기본 클래스로 변환해서 값으로 넘기는 경우 클래스의 다형성이 손상되는 문제를 말한다.
가령 Person과 Student에 동일하게 Print 함수가 있다면 Student를 Person으로 값에 의한 호출을 한 경우 Print함수는 Person의 Print로 동작하게 된다.
값에 의한 전달이 저비용인 경우
다음의 세 가지만 값에 의한 전달이 저비용이라고 가정해도 되며 나머지는 참조를 사용하는 것이 더 낫다.
- 기본 제공 타입
- STL 반복자
- 함수 객체 타입