-
Effective C++...20일지 2022. 6. 22. 07:55
함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자
참조자를 반환할 때의 문제점
참조자를 반환하는 경우 지역 변수를 반환하거나 힙에 객체를 할당한 뒤 반환하려고 할 수 있으나, 이 두 방법 모두 문제가 있다.
- 지역 변수 참조자 반환 지역 변수는 범위를 벗어나면 소멸된다. 따라서 함수를 벗어나 반환된 참조자는 의미 없는 정보가 된다.
- 힙 할당 객체 참조자 반환 힙에 할당된 객체는 반드시 delete를 호출해 줘야 하나 사용자가 적절하게 사용할지 보장할 수 없다.
따라서 새로운 객체를 반환하는 게 옳다.
inline const Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational(lhs.n & rhs.n, lhs.d * rhs.d);
}
※ 몇몇 조건하에서는 최적화 메커니즘을 통해 반환 값의 생성자, 소멸자 호출이 큰 오버헤드를 가지지 않게 구현되므로 최적화는 컴파일러에게 맡기자.