2014-04-09 5 views
0

std::shared_ptr 또는 std::tr1::shared_ptr 개체에서 원시 포인터를 추출 할 수 있습니까? 의도는 더 이상 객체의 수명을 관리하지 못하도록 스마트 포인터 객체에 알려주는 것입니다. 컨텍스트는 사용자로부터 원시 포인터를 가져 와서 개체에 대한 처리를하는 API를 가지고 있다는 것입니다. 일을 더 쉽게 관리하기 위해 API는 shared_ptr을이 원시 포인터에서 만듭니다. 이제 사용자는 반환 할 개체를 요청할 수 있습니다. 이 경우 처리 된 객체를 다시 사용자에게 제공 할 때 원시 포인터를 돌려 주려고합니다. 그러나, 나는 그것을 할 길을 찾지 못했습니다. .get()을 사용하면 스마트 포인터를 무기한으로 유지해야하기 때문에 불가능합니다. 나는 unique_ptr을 돌려 주었을 것이지만 tr1에는 그것을 사용할 수 없다.shared_ptr에서 원시 포인터 추출

기본적으로 원시 포인터를 shared_ptr 밖으로 옮기고 싶습니다.

+0

코드로 사례를 만들 수 있습니까? 왜 포인터를 사용자에게 돌려주고 싶은지에 대해서는 잘 모르겠습니다. – Shoe

+0

제어 할 수있는 클래스에 대한 포인터 또는 제어 할 수있는 클래스에서 파생 된 포인터입니까? – aschepler

+0

@ Jefffrey, 불행히도 코드 샘플이 너무 복잡합니다. 설명하기가 얼마나 어려운지 깨닫기 만하면 디자인을 바꿔야한다고 생각하기 시작합니다. – 341008

답변

1

나는 shared_ptrrelease() 방법을 찾고 있다고 생각합니다. 죄송합니다 - 의도적으로 그러한 방법이 없습니다.

여기 내가 원하는 것을하는 재미있는 방법을 발견했습니다 - https://stackoverflow.com/a/13701773/233885.

문맥 (소유권)에서 shared_ptr을 다시 사용하는 것이 좋습니다.

+0

그래, 나는'release()'메소드를 찾고 있었다. 저 포스트에서 제안 된 대답은 나 같은 비 전문가에게는 너무 위험 할 수 있습니다. 나는 그 버그를 추적 할 필요가 없다. :) 내 디자인을 다시 생각해야 할 것 같아. 어쨌든 고마워. – 341008

관련 문제