정상적인 규칙은 참조를 할 수 있다면 그렇게하는 것입니다. 예제에서 f3의 경우, 포인터를 삭제한다는 사실은 함수가 포인터를 취하는 경우 훨씬 간단하다는 것을 암시합니다. 아무도 함수를 참조를 삭제할 것으로 기대하지 않기 때문입니다.
f2는 사용자가 NULL이 아닌 값을 전달하도록하므로 참조가 좋습니다. 아마도 추가 정보없이 const 수정하면 즉, f2가 비 const 메소드를 호출하여 Obj를 수정할 수 있습니다.
디자인이 f1, f2 및 f3과 같은 이름을 가진 좋은 것인지 확인하기가 어렵습니다. 때때로 이름이 모든 차이를 만들 수 있습니다. 예를 들어, f3의 이름이 "useAndDispose"이거나 이와 유사한 경우 함수의 호출자는 포인터가 사용 후 삭제된다는 것을 분명히합니다.
마찬가지로 함수가 사용자가 정리해야하는 리소스를 반환하는 경우 일반적으로 getSomething이 아닌 createSomething을 나타내는 이름이 좋습니다.
Daniel은 "일반적으로"전달 된 포인터를 삭제하지 않는다고 말했습니다. 결코 "결코"아닙니다. 이 함수는 구체적으로 클린업 함수이거나 워크 플로 상황 일 수 있습니다.이 워크 플로 상황에서 무언가가 돌아 다니고 처리됩니다.
나는 당신이 결코 당신의 코드를 본 사람이 그것을 기대하지 않을 것이기 때문에 (물론 그들의 주소를 가지고) 당신에게 전달 된 참조를 절대로 삭제해서는 안된다고 말할 것이다.
아니면 다른 사람들이 참조하는 것이 좋습니다. 'delete' 문은 더 나쁘지 만 감싸 져야합니다. – GManNickG
참조로 모두 전달할 수 없습니까? –
f2에는 결코 NULL을 사용하지 않아야하므로 계약서에 참조가 있습니다. 비 const을 취하도록 객체를 수정할 수 있습니다. f1을 사용하면 NULL을 전달하고 대소 문자를 처리 할 수 있습니다. – CashCow