[C++] 약한(Weak) 포인터

Date:     Updated:

카테고리:

태그:

이 글은 C++의 약한(Weak) 포인터을 공부하고 정리한 글입니다.
약한 포인터는 원시 포인터의 해제에 영향을 끼치지 않는 포인터로 강한 참조 카운터가 0이 될 때 소멸된다.

약한 포인터(weak_ptr)

  • 약한 참조를 사용한다
  • 약한 참조 카운트를 늘림
  • 약한 포인터로 원시 포인터의 해제에 영향을 끼치지 않는다
  • 약한 참조로 참조되는 개체는 강한 참조 카운터가 0이 될 때 소멸된다

    코드 예시

    #include <memory>
    #include "Person.h"
    
    int main()
    {
        std::shared_ptr<Person> owner = std::make_shared<Person>("Reoul");
        std::weak_ptr<Person> weakOwner = owner;
    
        std::shared_ptr<Person> lockedOwner = weakOwner.lock();
    
        return 0;
    }
    

    약한 참조

    • 약한 참조는 원시 포인터 해제에 영향을 끼치지 않음
    • 약한 참조 카운트는 약한 참조의 수를 저장하는 데 사용됨
    • 약한 참조로 참조되는 개체는 강한 참조 카운터가 0이 될 때 소멸됨
    • 순환 참조 문제의 해결책

    lock()

    std::shared_ptr<T> lock() const noexcept;
    
    • 원시 포인터가 존재하면 공유 포인터를 만든다
    • 약한 포인터를 사용하려면 무조건 lock()을 해 공유 포인터로 만들어서 소멸되는 것을 막아야한다
    std::shared_ptr<Person> lockedOwner = weakOwner.lock();
    

    expired()

    bool expired() const noexcept;
    
    • 공유 포인터가 해제되었으면 true를 반환한다
    bool bIsExpired = weakOwner.expired();
    


참조

포큐아카데미 C++ 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기