http://www.codeproject.com/KB/cpp/XONOR.aspx
shared_ptr<T> 를 실전에 적용해보려다 막상 여러가지 불편함에 맞닥뜨려본 입장으로선 새로운 관심..
간단히 요약하자면 owner_ptr<T> 와 ref_ptr<T> 라는 두가지 종류의 포인터를 사용해서 오브젝트를
사용하되, owner_ptr<T> 가 소유권을 전담하고 ref_ptr<T> 는 단순 참조로만 사용. 만약 owner_ptr<T>
가 사라지게 되면 T 도 사라지고 ref_ptr<T> 의 값은 자동으로 NULL 로 바뀌게 된다.
따라서 owner_ptr<T> 나 ref_ptr<T> 모두 이미 삭제된 오브젝트를 참조할 리스크(a.k.a. dangling pointer)는
원천적으로 차단된다. (주의사항 참조)
using std::tr1::weak_ptr;
shared_ptr<int> p(new int);
weak_ptr<int> w_p = p;
*p = 20;
{//사용할때
shared_ptr<int> u = w_p.lock();
*u = 10;
}
assert( *p == 10 );
// p가 파괴된후
shared_ptr<int> u = w_p.lock();
assert( !u );
설명해주신 내용대로 됩니다.
단, xonor같은 경우는 참조용 포인터를 바로 사용할 수 있다는 장점이 있네요.