reference와 pointer는 각각 어떤 때 쓰나요?
조회수 3747회
reference
랑 pointer
를 어떻게 쓰는 건지는 알고 있습니다.
제가 알고 싶은 건
reference
랑 pointer
를 쓰는 것 중 어느 것이 더 적절한지입니다.
어떤 경우에는 이게 정해져 있는데(++ 연산자는 reference
만 쓰는 등) 안 정해져 있는 경우
보통은 변수가 중간에 바뀌는 경우는 보통 다들 포인터를 쓰더라구요.
소스코드
void add_one(int& n) { n += 1; }
void add_one(int* const n) { *n += 1; }
int main() {
int a = 0;
add_one(a); // a가 바뀌는지 안 바뀌는지 모름. a = a+1일 수도 있지만 a+1이 return될 수도?
add_one(&a); // a가 바뀔 것이라 예상 됨
}
레퍼런스를 쓰는 것 보다 포인터를 쓰는 게 지금 뭘 하고 있는 건지 확실하게 알 수 있으니까 뭘 하는지 분명하게 전달하려면 레퍼런스보다 포인터를 쓰는 게 더 나은 방법인가요? 그러면 레퍼런스는 정말 필요할 때만(++연산자) 써야 하나요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
포인터는 가급적이면 안 쓰는 것이 좋습니다.
포인터를 쓰면 코드를 읽는 것도 따라가기도 힘들어집니다. 이런 코드는 안전하지 않습니다. 나중에 예기치 못한 상황이 발생할 수 있으니까요.
그러니 제일 좋은 방법은 다른 방법이 없겠다 싶을 때에만 포인터를 쓰는 겁니다. 예를 들어, 함수가
nullptr
을 return할 수 있는 경우에는 포인터를 return해야만 합니다.질문하신 코드에서는 다음과 같은 이유로
pointer
를 쓸 필요가 없습니다.pointer
를 인자 값으로 받는다는 뜻은nullptr
을 인자로 받을 수 있고,nullptr
에서도 함수가 잘 작동한다는 뜻으로 받아들여집니다.그런데 질문하신 코드에서는
null pointer
을 인자로 넘기면undefined-behaviour
인 반면reference
는 1의 상황을 허용하지 않음reference
를 쓰는 경우가 유저에게 더 이해하기 쉬움 - 유저에게null
이 아닌 object만을 써야 한다는 걸 알려줌
이므로
reference
를 쓰는 게 좋습니다.
댓글 입력