2014-10-30 3 views
0

나는 일부 내부 테이블에서 다음과 같은 기본 요소를 사용합니다.found/not-found shared_ptr 표시

X const * find (키 const & 키);

발견 된 경우 발견 된 요소에 대한 포인터를 찾지 못하면 null을 반환합니다.

나는 벌거 벗은 포인터 대신 shared_ptr과 비슷한 것을하고 싶습니다.

+0

조언 만하면됩니다. 대신 weak_ptr을 반환하고 shared_ptr을 사용하는 것이 좋습니다. 데이터 구조 내부에서 – RJinman

+0

또는 내부적으로 unique_ptr을 사용할 수 있으며 컨테이너가 내용의 단독 소유권을 가질 것으로 예상되는 경우 참조를 반환 할 수 있습니다. – RJinman

+0

@ Rob Jinman. 나는 반환 된 참조가 shared_ptr에 대한 나의 관심사 때문에 다른 어떤 객체에서 유지 될 것이라고 기대한다. 나는 내부 테이블이 shared_ptr을 기반으로하므로 검색 결과로 전달하는 것이 가장 저렴한 옵션이 될 것이라고 기대한다. 이 인터페이스의 IMHO 사용자는 weak_ptr 또는 shared_ptr을 내부 용도로 사용할지 여부를 결정해야합니다. – zzz777

답변

3

아무런 문제없이 동일한 방식으로 작동합니다. shared_ptr에는 "null"포인터를 만드는 기본 생성자가 있으며 if conndition과 같은 부울 컨텍스트에서 shared_ptr을 평가할 수있는 연산자도 있습니다.

return shared_ptr<X>(); 

을 그리고 그것을 테스트 : 당신이 반환 아무것도 때, 단지 말을

if (shared_ptr<X> ptr = myFunc()) { 
    // do something with *ptr 
} 
0

나도 몰라 shared_ptr을 반환 고집하는 이유? shared_ptr은 메모리 관리 도구입니다. 함수 안에서 사용할 수 있습니다. 그러나 shared_ptr, reference/raw 포인터를 반환하는지 여부에 관계없이 함수 호출자에게는 아무런 차이가 없습니다. (비동기 환경에서는 많은 함정이 있습니다.)

또한 shared_ptr은 참조 카운팅 메커니즘을 기반으로합니다. 즉, 누군가가 더 이상 참조하지 않는 경우에만 삭제됩니다. 따라서 반환 할 경우 0에 도달하는 참조 횟수를 절대로 사용하지 못하도록 영구적으로 저장하지 않도록해야합니다.