2011-08-02 3 views
3

약 1 년 동안 C/C++를 코딩 해왔으므로 좋은 OO 및 C++ 코드를 작성하는 데 선호되는 방법을 배우려고했습니다. 즉, 코딩 할 때 무언가를 입력하고 작동하는지 확인하기보다는 항상 무언가를 구현할 때 최상의 방법을 찾습니다. C++에서는 함수에 인수를 전달할 때 원시 포인터 대신 참조를 사용하여보다 안전하게 사용한다고 설명했습니다. 그래서 더 나은 코딩으로 간주됩니다. 비록 많은 고품질 오픈 소스 프로젝트 (C++)에서는 참조 대신 포인터를 사용합니다. 모든 인수, 반환 및 물건은 안전한 참조가 아닌 포인터입니다. Microsoft의 DirectX조차도 더 안전한 옵션 이상으로 포인터를 사용합니다. 참조 대신 포인터를 사용하여 어떤 이점도 볼 수 없다. 실제로 원시 포인터는 동적 할당이 필요없는 상황에서 참조보다 더 나쁘다고 생각한다.좋은 코딩 : 참조보다는 포인터?

그래서 내 질문에 : 더 나은 방법을 사용할 수있을 때 대부분의 오픈 소스 프로젝트에서 포인터를 사용하는 이유는 무엇입니까?

+4

"심지어 Microsoft의 DirectX는 더 안전한 옵션보다 포인터를 사용합니다."어떤 DirectX API를보고 있습니까? 그들 대부분은 C API이고 C에는 참조가 없습니다. –

+1

아마도 복제본 (또는 답변자) 일 수도 있습니다. http://stackoverflow.com/q/57483/677667 –

+0

@Chris : 복제본이 아닙니다. http://meta.stackexchange.com/questions/95799/closing-as-duplicate-when-the-answers-are-duplicates –

답변

1

"많은 고품질 오픈 소스 프로젝트"에서 이상적인 C++는 사용되지 않습니다. 이러한 많은 라이브러리는 C++을 C 언어로 간주하지만, 자체 언어가 아닌 몇 가지 종소리와 휘파람을 추가했습니다.

특정 라이브러리가 없어도 참조를 사용하지 않고 참조를 사용하지 않는 것에 대해서는 말하기가 어렵습니다. C API를 노출하는 경우 C에는 참조가 없기 때문에 물론 포인터를 사용해야합니다.

0

당신이 완벽하다고 생각하는 코드가 그렇게 많은 이유가 있습니다.

오픈 소스 영역에서 한 가지 문제는 무료로 많은 기술자가 시간을 보내는 많은 사람들이 있다는 것입니다. 따라서 종종 어떤 클래스에는 C가 포함 된 스타일의 매쉬 매시가 있습니다.

dx10과 같은 대형 프로젝트에서는 포인터가 다른 참조로 사용되는 이유에 대해 많은 이유가 있지만 가능한 한 '순수 C'와 쉽게 통합 할 수있는 점이 많습니다. 참조 유형이 없습니다. 또는 단순히 클래스 추상화에 싸여 C 라이브러리입니다.

덜 나쁜 이유는 주변에 '불량'코드가있어서 직접 작성해야 할 이유가 없기 때문입니다. 참조에 의해 전달

2

그 품질 여부의 표시가 있는지 확인하지만, Google's C++ Style Guide에 따라하지,

모든 매개 변수는 CONST를 표시해야합니다. 출력 인수 포인터가있는 동안

...

는 사실 입력 인수가 값 또는 const를 참조 것을 구글 코드에서 매우 강력한 규칙입니다.

+1

정말 품질의 표시라고 생각하지 않습니다. Google 가이드는 Google의 기존 C 코드베이스와 잘 작동하는 코드를 작성하여 새로운 코드에 가장 적합하도록 제작되었습니다. 예를 들어, 이들은 C++ 예외를 금지합니다. –