일반적으로 나는 Google 스타일 가이드를 따르며, 나는 사물을 보는 방식과 잘 어울립니다. 또한 거의 독점적으로 boost :: scoped_ptr을 사용하여 단일 관리자 만 특정 객체의 소유권을 갖도록합니다. 그런 다음 나체 포인터를 전달합니다. 아이디어는 내 프로젝트가 구조화되어있어 객체를 사용하는 객체가 파괴 된 후에 객체의 관리자가 항상 파괴되도록합니다.scoped_ptr에 대한 약한 참조?
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Smart_Pointers
이 모든 좋은,하지만 난 그냥 주인이 너무가 삭제 된 사용 된 객체 전에 삭제하는 일이 불쾌한 작은 메모리 스톰 버그에 물린했다.
이제 모든 사람들이이 패턴에 대해 어리 석다는 점에서 위와 아래로 뛰어 오르기 전에 shared_ptr을 사용하지 않는 이유는 무엇입니까? 등등, 내가 정의되지 않은 소유자 의미를 갖고 싶지 않다는 점을 고려하십시오. shared_ptr이이 특별한 경우를 포착했지만 시스템의 사용자에게 잘못된 메시지를 전송합니다. 그것은 "누가 이걸 소유했는지 모르겠다. 너 일 수있다!"
범위 포인터에 약한 포인터를 사용했을 때 도움이 될만한 점은 무엇입니까? 실제로, 범위가 좁은 참조 목록이있는 범위가 지정된 포인터. 범위가 지정된 포인터가 소멸 될 때 제외됩니다. 이것은 단일 소유권 의미론을 허용 할 것이지만, 사용 객체가 내가 만난 문제를 잡을 수있는 기회를 제공한다.
scoped_ptr에 대한 추가 'weak_refs'포인터와 weak_ptr에서의 'next_weak_ptr'에 대한 추가 포인터를 희생시키면서 작은 단일 소유자, 다중 사용자 구조를 만들 수 있습니다.
디버그 기능 일 수도 있습니다. 따라서 '릴리스'에서 전체 시스템은 정상적인 크기의 scoped_ptr 및 약한 참조에 대한 표준 단일 포인터로 되돌아갑니다.
그래서 .....이 모든 후 내 질문은 다음과 같습니다
- 이미 내가 가 누락 STL/부스트 이러한 포인터/귀갑가 있습니까, 아니면 그냥 내 자신의 롤해야 ?
- 더 좋은 방법이 있습니까? 여전히 단일 소유권 목표를 충족합니까?
건배, 쉐인
표준 또는 라이브러리 구현에 대해 알지 못합니다. 설명했던 것을 구현한다면, 누군가가 weak_ptr에서 미처리 포인터를 가져 와서 캐시 한 경우를 감지하기를 원하는 것처럼 shared_ptr/weak_ptr을 향상시키는 것과 매우 유사한 구현으로 끝날 것입니다. 당신은 단지 shared_ptr/weak_ptr을 사용하고 "manager"에서 그것이 유지하고있는 shared_ptr이 객체를 파괴하려고 할 때 유일하다는 것을 주장하기를 원한다고 말했을 것입니다. –