2012-04-10 3 views
2

포인터로 전달할 때 참조로 전달되는 것이 바람직한 경우를 누군가에게 줄 수 있습니까?참조로 전달할 때 주소/포인터로 전달할 때 필수 항목이 될 때

기본적으로 두 기능 모두 동일한 기능을 제공하지만 참조로 전달되는 부분이 필수 항목이되어야합니다.

또한 둘 중 하나를 사용하는 방법을 제안하십시오.

몇 가지 기본적인 예를 들어 설명해주십시오.

+0

이 숙제가 있습니까? 있는 경우 태그를 추가하십시오. – RedX

+0

그냥 좀 더 나은 설명이 필요합니다 :) –

+0

가능한 중복 : http://stackoverflow.com/questions/2550377/when-pass-by-pointer-is-preferred-to-pass-by-reference-in-c – Konrad

답변

3

복사 생성자 및 할당 연산자.

struct A { 
    ... 
    A(const A& copy); 
    A& operator = (const A& copy); 
}; 

이 필수 상황이다. 이 외에도 다른 상황이있을 수 있습니다 (예 : +, <, > 등과 같은 다른 연산자가 오버로드 됨).

또한 둘 중 하나를 사용하는 방법을 제안하십시오.

대부분의 장소에서 참조 (C++ 스타일)를 선호하고 참조를 사용할 수없는 경우 포인터 (C 스타일)를 사용하는 경향이 있습니다.
참조는 다소 유사하지만 포인터는 const입니다. 즉 A&A* const과 비슷합니다. 따라서 우연히 위치를 덮어 쓰지 않도록 내부 안전을 제공합니다.

+0

실제로 전달에 의한 전달은 할당 연산자에 대해 필수적인 것은 아닙니다 (표준에 의한 참조에 의한 참조가 ' t 중 하나). 복사 - 스왑 (copy-and-swap) 관용구를 사용할 때 복사 비효율에 유리한 값으로 전달할 수 있습니다. – Grizzly

1

내 간단한 규칙은 언제 어디서나 가능한 경우 참조로 전달하는 것을 선호합니다. null 값을 전달할 수있는 기능이 필요한 경우 포인터로 전달을 사용해야합니다. 그렇지 않으면 참조로 전달을 사용하십시오.

1

연산자를 오버로드하는 경우 참조를 전달해야합니다. 예 :

class A { 
    A& operator=(const A &other); 
} 
1

복사 생성자는 참조로 인수를 취해야합니다.

연산자 오버로드는 포인터가 아니라 값 또는 참조로 인수를 가져야합니다.

정상적인 기능의 경우 선택은 사용자의 것이며, null 인수 나 동적 배열을 허용하려면 포인터를 사용해야합니다.

일부 사람들은 가능할 때마다 참조를 사용하는 것을 선호합니다. 그것이 null인지, 그리고 단일 객체 또는 배열을 참조하는지 여부 또는 함수가 객체를 삭제할 수 있는지에 대한 혼동의 범위가 있는지 확인할 필요가 없습니다. 호출 사이트에서 함수가 객체를 변경할 수도 있다는 표시를 제공하기 때문에 포인터를 사용하는 것이 좋습니다.

관련 문제