2011-08-29 2 views
10

경우에 작동 shared_ptr을하지, 내가 좋아하는 뭔가를 쓸 수 있습니다 :방법 C++에서 조건

shared_ptr<A> a_sp = someFunctionReturningSharedPtr(); 
if (a_sp) { 
    cout << a_sp->someData << endl; 
} else { 
    cout << "Shared Pointer is NULL << endl; 
} 

if (a_sp) 확인 작업을 제대로합니까? a_sp은 부울이 아니지만 true 또는 false를 어떻게 확인합니까? if 조건이 a_sp.get() 함수의 결과를 확인하는 것을 어떻게 알고 있습니까? 또는 그렇지 않은 경우 a_spNULL은 어떻게 확인됩니까? 거기에 부울 값으로 변환 shared_ptr 정의 된 일부 기능이 있나요?

답변

14

shared_ptr은 부울 컨텍스트에서 사용할 수있는 operator unspecified-bool-type() const입니다. 지정되지 않은 부울 유형은 일반적으로 부울 함수 오버로드와의 우발적 인 일치를 허용하지 않기 위해 함수에 대한 포인터 또는 멤버 함수에 대한 포인터로 정의됩니다.

C++0x에서 관용구 (등등 산술 int 그러한 함수 호출과 같은, 전환, 등) 암시 적 변환을 허용하지 explicit operator bool() const;를 사용하지만, 여전히 shared_ptr가가 bool bool로 전환 될 수있다.

+0

Mankarse :이 구문은 무엇입니까? 연산자 unspecified-bool- type()'. 나는 전에 이것을 보지 못했다. 이것을 향상시키는 것이 특별한가요? –

+0

unspecified-bool-type은 bool과 같은 실제 유형을 나타냅니다. 이 구문은 특별한 부스트가 아니라 "형식 변환 연산자"를 선언하는 구문입니다. [wikibooks] (http://en.wikibooks.org/wiki/C++_Programming/Operators/Operator_Overloading#Conversion_operators)를 참조하십시오. – Mankarse

+0

Mankarse : Awesome. 링크를 가져 주셔서 감사합니다. –

2

shared_ptr에는 연산자 bool()이있어 비어 있지 않은 경우 true를 반환합니다. - 테스트 소유 한 자원이 존재하는 경우 http://msdn.microsoft.com/en-us/library/bb982901.aspx

shared_ptr의 :: 연산자 부울 형 : 예를 들어

,이있는 shared_ptr의 Microsoft에서 구현 : 운영자 부울()입니다.

+0

알렉스. –

+1

그것은 단지 개념적으로 정확하지만 실제로는 아닙니다 : http://www.artima.com/cppsource/safebool.html; 하지만 명시 적 변환 연산자로 수정해야합니다 : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2435.htm –