본문 바로가기

std::shared_ptr2

std::weak_ptr std::weak_ptr은 std::shared_ptr에서의 문제점인 자신이 가리키는 대상이 이미 파괴되었을 수 있다는 문제를 극복 할 수 있다. std::weak_ptr는 역참조 할 수 없으며, 널인지 판정할 수도 없다. std::weak_ptr는 그 자체로 smart pointer가 아닌 std::shared_ptr를 보강하는 위치에 있기 때문이다. 대체로 std::weak_ptr는 std::shared_ptr를 이용해 생성한다. std::weak_ptr는 자신을 생성하는데 쓰인 std::shared_ptr가 가리키는 것과 동일한 객체를 가리키지만 그 객체의 참조 횟수에는 영향을 주지 않는다. 대상을 잃은 std::weak_ptr를 만료 되었다고 하며, expire를 호출함으로써 알 수 있게 된다. .. 2020. 7. 14.
소유권 공유 자원의 관리에는 std::shared_ptr를 사용하라 공유 포인터 즉 std::shared_ptr를 통해서 접근되는 객체의 수명은 공유포인터가 shared ownership 의미론을 통해서 관리한다. 특정한 하나의 std::shared_ptr이 객체를 소유하는 것이 아니다. 그 대신 모든 std::shared_ptr는 객체가 더 이상 필요하지 않게 된 시점에서 객체가 파괴됨을 보장하려 한다. 객체가 가리키던 마지막 std::shared_ptr가 객체를 더 이상 가리키지 않게 되면 자신이 가리키는 객체를 파괴한다. 이를 위해 std::shared_ptr는 자원에 연관된 값을 참조 횟수로서 제어블록에 담아 관리한다. 보통 생성시 참조 횟수를 증가시키며, 소멸자는 감소시킨다. 복사 배정 연산자는 둘 모두 수행한다. 이동 생성의 경우 기존 std::shared_p.. 2020. 7. 13.