누군가가이 필요를 채울 수있는 모든 항목을 돌고 있는지 궁금합니다.존재하지 않습니다 : 하나의 객체가 소유 한 스마트 포인터가 액세스를 허용합니다.
개체 A는 개체 B를 포함합니다. 포인터를 통해 해당 B에 대한 액세스를 클라이언트에 제공하려고합니다 (아마도 0 일 수있는 옵션이 있거나 클라이언트가 복사 가능해야하고 참조를 보유해야 할 수도 있습니다 ...).). 클라이언트는 객체 C를 호출 할 수 있습니다. 일반적으로 완벽한 개발자라면 B에 대한 포인터에 대한 평생의 의미를 위반하지 않도록주의 깊게 작성해야합니다. 그러나 우리는 완벽하지 않습니다. 사실 우리는 완벽하지 않습니다. 꽤 바보 같은 반 시간.
그래서 우리는 오브젝트 C가 "공유"소유권이 아니지만 오브젝트 A가 더 이상 유효하지 않은 상황을 인식 할 정도로 똑똑한 오브젝트 B에 대한 포인터를 갖고 싶습니다. 파괴되었거나 객체 B를 파괴합니다. 더 이상 유효하지 않을 때이 포인터에 액세스하면 어설 션/예외가 발생합니다.
즉, 데이터에 대한 액세스를 안전하고 명확하게 공유하지만 원래의 소유권 의미를 유지하려고합니다. 현재, 객체 중 하나가 소유하고있는 공유 포인터를 찾을 수 없기 때문에 shared_ptr을 대신 사용하고 있습니다. 그러나 나는 명확한 소유권과 공유/약한 포인터가 정말로 그것을 제공하지 않기를 바란다.
이 스마트 포인터를 동적으로 할당 된 메모리 영역에 대한 포인터를 보유하지 않고 멤버 변수에 연결할 수 있다면 더욱 좋습니다.
존재하지 않는다면 나는 그것을 만들려고합니다. 그래서 누군가 먼저 이미 누군가가 그것을 발표했는지 알고 싶습니다.
그리고 BTW, 저는 참고 문헌과 포인터 같은 것들이 이런 종류의 것을 제공한다는 것을 알고 있습니다 ... 저는 더 똑똑한 것을 찾고 있습니다.
글쎄, 아무도 밟아서 하나를 가리키고 있지 않으므로이 시점에서 나는 거기에 없다고 가정하고 있습니다. Loki 라이브러리를 확인해보십시오. 지금까지의 답변은 OK이며 weak_ptr 사용법을 모르는 사람에게 도움이 될 것입니다. 그러나 실제로이 목적을 위해 특별히 설계된 무언가를 찾고 있습니다. 따라서 실제로 받아 들일 수 없습니다. –