본문 바로가기

C/C++

[Google C++ Style Guide] 4. Google-Specific Magic

Google C++ Style Guide

 

 

4. Google-Specific Magic

구글이 C++ 코드를 보다 견고하게 만드는 트릭과 유틸리티와 다른 곳에서 보던 코드와는 다른 구글만의 C++코드를 보여준다.

 

A.     Smart Pointers

포인터를 사용해야 한다면boost::scoped_ptr를 사용한다객체가 STL 컨테이너를 담는 경우처럼 특정 조건 하에서는 std::tr1::shared_ptr 만을 사용해야 한다절대 auto_ptr을 사용하면 안된다.

 

스마트’ 포인터는 포인터처럼 동작하는 객체이다따라서 메모리를 스스로 관리한다예를 들어scopted_ptr이 파괴될 때 포인터가 가리키는 객체를 소멸시킨다. shared_ptr도 마찬가지이지만참조 카운팅 방식 스마트 포인터로 참조 카운터가 0이 되면 객체를 삭제한다.

 

일반적으로 객체의 소유권(ownership)을 분명하게 코드를 설계해야 한다가장 명확한 객체 소유권은 포인터를 전혀 사용하지 않고 객체를 직접 필드나 지역 변수로써 사용하는 것이다다른 극단적인 방법은 참조 카운트 포인터를 아무도 소유하지 않는 것이다.

 

참조 카운팅 포인터 설계의 문제는 원형 참조나 객체가 절대 삭제되지 않는 이상한 조건을 만들기 쉽다또한 값이 복사되거나 할당될 때마다 atomic operation을 수행하기 위해서 느리다.

(*atomic opration : operation의 집합이 결합하여 하나의 operation으로 표시되어 결과가 성공이나 실패의 형태로 나타나는 Operation)

 

추천하지는 않지만참조 카운팅 스마트 포인터는 때로 가장 간단하며우아하게 문제를 해결할 수 있는 방법이다.

 

B.      cpplint

스타일 에러를 검출하기 위해 cpplint.py를 사용한다.

 

Cpplint.py는 소스 파일을 읽고 스타일 에러를 찾아주는 툴이다완벽하진 않으며에러 메시지가틀리다거나(false positive), 에러를 검출 못하기도 하지만(false negative) 꽤 유용한 툴이다.

False positive는 라인 끝에 //NOLINT를 추가하여 무시할 수 있다.