ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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);

    }


     

    ※ 몇몇 조건하에서는 최적화 메커니즘을 통해 반환 값의 생성자, 소멸자 호출이 큰 오버헤드를 가지지 않게 구현되므로 최적화는 컴파일러에게 맡기자.

     

    댓글

Designed by Tistory.