Post List

2015년 1월 4일 일요일

함수에서 객체를 반한해야 할 경우에 Reference를 반환하려고 들지 말자.

* Reference를 반환하는 것은 이미 만들어진 개체에 대해서만 해야한다. 새로 생성되는 개체에 대해서 Reference를 반환하는 것은 위험하다.

예를 들어서 두 수의 곱을 반환하는 함수가 있다고 했을 때, 반환하는 값은 Value 이어야지 Constant Reference 일 경우 많은 문제가 발생 할 수 있다.

class Value {
public:
     Value(int i = 0);
private:
    int v;
    friend const Value& operator* (const Value& l, const Value& r);
};

Value a, b, c, d;

if ((a * b) == (c * d)) { ... }

위의 예제를 보면 Call by Constant Reference 로 * 를 반환하였다.  아래의 if 비교문은 새로 생성된 개체에 대한 주소값을 비교하는 것으로 무조건 false값이 된다.

댓글 없음:

댓글 쓰기