2014-12-27 2 views
0

shared_ptr과 함께 weak_ptr을 가질 수 있습니다. 그러나 동일한 객체를 참조하는 shared_ptr 및 unique_pointer를 만들 수 있는지 알고 싶었습니다. 그렇다면 어떤 규칙을 따라야합니까?다른 스마트 포인터가 동일한 객체를 참조 할 수 있습니까?

+0

그럴 수도 있지만, 그러면 나쁠 것입니다. 스마트 포인터를 사용할 시점이 없습니다. – Nawaz

+1

오브젝트를 참조하는 * 유일한 포인터 이상의 개념은 바로 접두어 인 * unique *과 다소 반 직관적입니다. 왜 이걸하고 싶어? – WhozCraig

+1

우리는 방금 공부하고있었습니다. 질문은 우리의 마음에 왔습니다. 우리는 그것에 대한 답을 찾지 못했습니다. –

답변

3

동일한 개체에 unique_ptrshared_ptr을 만들면 서로에 대해 알 수 없습니다. 따라서 다른 포인터가 이미 해제되었을 때 실수로 한 포인터를 역 참조 할 수있는 것은 말할 것도없고 "이중 자유"오류가 발생합니다.

간단히 말해서,하지 마세요. unique_ptr에서 shared_ptr로 또는 그 반대로 소유권을 이전해야하는 경우 "새"포인터를 만들 때 "이전"포인터에서 release()으로 전화하십시오.

"어떤 규칙을 따라야합니까?"라는 질문에 대한 대답은 둘 다입니다. 각 스마트 포인터는 자체 규칙을 따르지 만 전체적인 시스템 동작은 잘못된 것입니다. delete을 호출하기 전이나 후에 원시 포인터에서 하나의 스마트 포인터를 생성하는 것과 같습니다.

같은 조언은 동일한 원시 포인터에 두 개의 unique_ptr 또는 두 개의 shared_ptr을 만드는 데 적용된다는 점에 유의하십시오. 스마트 포인터의 유형을 혼합한다는 사실은 실제로 적절하지 않습니다.

관련 문제